アプリケーションでPhoneGap+SenchaTouchを使用しています。写真を撮ってサーバーにアップロードすることができました。フォトライブラリから画像を選択する際に問題が発生しました。
selectPicture: function () {
navigator.camera.getPicture(this.uploadPicture.bind(this), this.getPictureError.bind(this), {
// camera options
quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
});
}
destinationTypeプロパティに問題があると思います。私のuploadPicture関数では、imageURIは次のようなディレクトリを返します:'content:// media / external / images / media/[いくつかの乱数]'。
imageURIは次のようにすべきだと思いました:'file://storage/sdcard/DCIM/Camera/myimage.jpg'
window.resolveLocalFileSystemURIを使用してみましたが、写真を撮っている場合は正常に機能しますが、写真を選択する場合は機能しません。フォトライブラリから画像を選択したい場合のコードは次のとおりです(sencha touch 2を使用しています)。
selectPicture: function () {
navigator.camera.getPicture(this.resolveFileURI.bind(this), this.getPictureError.bind(this), {
// camera options
quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
});
},
resolveFileURI: function (entry) {
console.log(entry);
window.resolveLocalFileSystemURI(entry, this.uploadPicture.bind(this), this.fail.bind(this));
},
uploadPicture: function (entry) {
console.log(entry.fullPath)
}
logcatによると、resolveFileURI関数には入れていません。実際、私のアプリケーションはクラッシュします。logcatのエラーは次のとおりです。
10-23 14:39:24.552:E / AndroidRuntime(2975):致命的な例外:メイン10-23 14:39:24.552:E / AndroidRuntime(2975):java.lang.RuntimeException:結果の配信に失敗しましたResultInfo {who = null 、request = 17、result = -1、data = Intent {dat = content:// media / external / images / media / 584}} to activity {com.dwmobile.android/com.dwmobile.android.AndroidSencha}:java .lang.NullPointerException 10-23 14:39:24.552:E / AndroidRuntime(2975):android.app.ActivityThread.deliverResults(ActivityThread.java:3141)10-23 14:39:24.552:E / AndroidRuntime(2975) :at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184)10-23 14:39:24.552:E / AndroidRuntime(2975):at android.app.ActivityThread.access $ 1100(ActivityThread.java:130)10- 23 14:39:24.552:E / AndroidRuntime(2975):android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1243)10-23 14:39:24.552:E / AndroidRuntime(2975):android.os.Handler.dispatchMessage(Handler.java:99)10-23 14:39:24.552:E / AndroidRuntime(2975):android.os.Looper.loop(Looper) .java:137)10-23 14:39:24.552:E / AndroidRuntime(2975):android.app.ActivityThread.main(ActivityThread.java:4745)10-23 14:39:24.552:E / AndroidRuntime(2975 ):at java.lang.reflect.Method.invokeNative(Native Method)10-23 14:39:24.552:E / AndroidRuntime(2975):at java.lang.reflect.Method.invoke(Method.java:511)10 -23 14:39:24.552:E / AndroidRuntime(2975):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)10-23 14:39:24.552:E / AndroidRuntime(2975 ):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)10-23 14:39:24.552:E / AndroidRuntime(2975):dalvik.system.NativeStart.main(ネイティブメソッド)10 -23 14:39:24.552:E / AndroidRuntime(2975):原因:java.lang.NullPointerException 10-23 14:39:24.552:E / AndroidRuntime(2975):org.apache.cordova.CameraLauncher.onActivityResult(CameraLauncher.java:453)10- 23 14:39:24.552:E / AndroidRuntime(2975):org.apache.cordova.DroidGap.onActivityResult(DroidGap.java:823)10-23 14:39:24.552:E / AndroidRuntime(2975):androidで。 app.Activity.dispatchActivityResult(Activity.java:5192)10-23 14:39:24.552:E / AndroidRuntime(2975):android.app.ActivityThread.deliverResults(ActivityThread.java:3137)552:E / AndroidRuntime(2975):android.app.Activity.dispatchActivityResult(Activity.java:5192)10-23 14:39:24.552:E / AndroidRuntime(2975):android.app.ActivityThread.deliverResults(ActivityThread .java:3137)552:E / AndroidRuntime(2975):android.app.Activity.dispatchActivityResult(Activity.java:5192)10-23 14:39:24.552:E / AndroidRuntime(2975):android.app.ActivityThread.deliverResults(ActivityThread .java:3137)