1

我在应用程序上使用 PhoneGap + Sencha Touch。我设法拍照并上传到服务器。我在从照片库中选择图片时遇到问题。

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): 致命异常: main 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 }} 到活动 {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) : 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 10-23 14:39:24.552: E/AndroidRuntime(2975): 在 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) ): 在 java.lang.reflect.Method.invokeNative(Native Method) 10-23 14:39:24.552: E/AndroidRuntime(2975): 在 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(Native Method) 10 -23 14:39:24.552:E/AndroidRuntime(2975): 由: java.lang.NullPointerException 10-23 14:39:24.552: E/AndroidRuntime(2975): at 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)

4

1 回答 1

2

这在Android上是正确的。您可以使用内容 URI 来设置图像源属性。您甚至可以将该 uri 传递给FileTransfer.upload。但是,如果您想获得一个真实的文件类型 uri,请将其发送到window.resolveLocalFileSystemURI,成功回调将为您提供文件路径。

于 2012-10-22T18:08:10.660 回答