2011-10-13 10 views
6

--------------- --------------- UPDATEPhoneGapのカメラの故障データを取得

はそのthere'ですHTC DesireカメラとこのバージョンのPhonegapに何らかの問題があります。この問題は、HTCがAndroidのカメラ仕様を返す方法と思われる。

--------------- --------------- UPDATE

I've書き換えるためのPhoneGapを使って私の以前のアプリケーションのコードが、私はカメラAPIを使用する必要はありません。私は実際の電話でそれを使用したときに写真を撮った後にクラッシュし、SendLogでこのエラーが発生しました。

10-07 09:44:46.980 D/AndroidRuntime(1626): Shutting down VM 
10-07 09:44:46.980 W/dalvikvm(1626): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
10-07 09:44:46.989 W/CameraThread(1159): Release Camera - set mIsLastCameraClosed to true 
10-07 09:44:46.989 W/CameraThread(1159): CameraHandler Message - CLOSE_CAMERA end 
10-07 09:44:46.989 E/AndroidRuntime(1626): FATAL EXCEPTION: main 
10-07 09:44:46.989 E/AndroidRuntime(1626): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=33, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.theinit.example/com.theinit.example.TestPhoneGapActivity}: java.lang.NullPointerException 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3734) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.access$2800(ActivityThread.java:135) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.os.Looper.loop(Looper.java:144) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at dalvik.system.NativeStart.main(Native Method) 
10-07 09:44:46.989 E/AndroidRuntime(1626): Caused by: java.lang.NullPointerException 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.content.ContentResolver.openInputStream(ContentResolver.java:286) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.phonegap.CameraLauncher.onActivityResult(CameraLauncher.java:248) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at com.phonegap.DroidGap.onActivityResult(DroidGap.java:1346) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.Activity.dispatchActivityResult(Activity.java:3931) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3730) 
10-07 09:44:46.989 E/AndroidRuntime(1626):  ... 11 more 

これはなぜ起こるのですか?

これは私のCamera.js

である。これは私のCamera.js

var options = { quality : 75, 
     destinationType : Camera.DestinationType.DATA_URL, 
     sourceType : Camera.PictureSourceType.CAMERA, 
     allowEdit : true, 
     targetWidth: 100, 
     targetHeight: 100 }; 

function capturePhoto() { 
    // Take picture using device camera and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, options); 
} 

function onPhotoDataSuccess() { 
    // Uncomment to view the base64 encoded image data 
    var theHTML = ''; 
    theHTML = '<div id="info">CameraSuccess</div>'; 
    document.getElementById('main').innerHTML = theHTML; 
} 

function onFail(message) { 
    // Called if something bad happens. 
    alert('Failed because: ' + message); 
} 
ある

が、それはすべての方法

答えて

1

によって

感謝を役に立てば幸い------ --------- UPDATE ---------------

HTC DesireカメラとこのバージョンのPhonegapに何らかの問題があるようです。この問題は、HTCがAndroidのカメラ仕様を返す方法と思われる。

--------------- --------------- UPDATE

このコードは、私のために正常に動作し、私はインデックス上のこのコードへの.js参照とcapturePhoto()関数を持つボタンだけを持っています。

誰もが問題を解決するのに役立ちます。

var pictureSource; // picture source 
var destinationType; // sets the format of returned value 

// Wait for PhoneGap to connect with the device 
// 
document.addEventListener("deviceready",onDeviceReady,false); 

// PhoneGap is ready to be used! 
// 
function onDeviceReady() { 
    pictureSource=navigator.camera.PictureSourceType; 
    destinationType=navigator.camera.DestinationType; 
} 

// Called when a photo is successfully retrieved 
// 
function onPhotoDataSuccess(imageData) { 
    // Uncomment to view the base64 encoded image data 
    // console.log(imageData); 

    // Get image handle 
    // 
    var smallImage = document.getElementById('smallImage'); 

    // Unhide image elements 
    // 
    smallImage.style.display = 'block'; 

    // Show the captured photo 
    // The inline CSS rules are used to resize the image 
    // 
    smallImage.src = "data:image/jpeg;base64," + imageData; 
} 

// Called when a photo is successfully retrieved 
// 
function onPhotoURISuccess(imageURI) { 
    // Uncomment to view the image file URI 
    // console.log(imageURI); 

    // Get image handle 
    // 
    var largeImage = document.getElementById('largeImage'); 

    // Unhide image elements 
    // 
    largeImage.style.display = 'block'; 

    // Show the captured photo 
    // The inline CSS rules are used to resize the image 
    // 
    largeImage.src = imageURI; 
} 

// A button will call this function 
// 
function capturePhoto() { 
    // Take picture using device camera and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 }); 
} 

// A button will call this function 
// 
function capturePhotoEdit() { 
    // Take picture using device camera, allow edit, and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true }); 
} 

// A button will call this function 
// 
function getPhoto(source) { 
    // Retrieve image file location from specified source 
    navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
    destinationType: destinationType.FILE_URI, 
    sourceType: source }); 
} 

// Called if something bad happens. 
// 
function onFail(message) { 
    alert('Failed because: ' + message); 
} 
+0

これはコード全体です。問題を解決するためにどのような部分を追加しましたか? – Roel

4

私は、PhoneGapの問題リストで同じエラーの人を手伝っただけです。許可が不足していると思われます。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

AndroidManifest.xmlファイルからキャプチャされたイメージを.jpgファイルに書き出すことができるようにする必要があります。

+0

私は初めにそう思っていましたが、Phonegapのウェブサイトにあるようなすべての権限を持っていました。私はちょうどそのプロジェクトを再度コピーし、上記のコードを貼り付けました。なぜそれが働き始めたのですか? – axierjhtjz

2

私は、AndroidManifest.xml内のminSdkVersionを7に設定すると同じ問題が発生しました.minSdkVersion = "2"を使用すると、この問題は発生しません。

+0

私のために働いていません:( – ghostCoder

1

EDIT

もともと私は自分の携帯電話に自分のアプリケーションをクリアし、それが問題を修正した再インストールすることを考えていました。これは当てはまりませんでした。カメラから画像を取得しようとすると、Android Garbage CollectionでPhoneGapアプリが削除されるという問題があることがわかりました。時間を検索した後、私が解決策をとったのは、foreground camera pluginを使っていました。このプラグインは、アプリケーション自体の内部に独自のカメラを作成します。この方法で、ガベージコレクションを心配する必要はありません。

残念ながら、完全には機能していないため、ほとんどのカメラオプションはユーザーが利用できません。また、Cordova 2.4.0のみをサポートしています。つまり、2.7.0からダウングレードする必要がありました。このソリューションは私の現在のアプリケーションでうまくいけばうまくいけば、私が書いた次のものが良い解決策になるだろう。これが誰かを助けることを願って!

+0

あなたは使用していたPhonegapのバージョンに関する情報を追加できますか?ソリューション – axierjhtjz

関連する問題