为什么我的Android应用程序中无法使用Cordova 2.7.0触发navigator.camera.getPicture?

问题描述:

我正在开发适用于Android的Cordova应用程序,此应用程序必须从设备上传图像。 测试正在使用Android 4.0.4的摩托罗拉Xoom平板电脑上进行。
科尔多瓦版本是2.7.0。为什么我的Android应用程序中无法使用Cordova 2.7.0触发navigator.camera.getPicture?

应用程序打开并正确调用ondeviceready。

用户按下一个按钮,和下面的功能被触发:

capture: function(sourceType) { 
    navigator.camera.getPicture(this.onCaptureSuccess, this.onCaptureFail, { 
    quality: 20 
    ,targetWidth: 100 
    ,targetHeight: 100 
    ,destinationType: Camera.DestinationType.FILE_URI 
    ,sourceType: Camera.PictureSourceType.PHOTOLIBRARY 
    ,correctOrientation: false 
    }); 
} 

一旦功能被触发的菜单被示为具有4个选项来选择文件的源(ASTRO文件管理器,ES文件浏览器,文件和图片库)和以下信息添加到logcat的:

05-11 13:30:51.400: D/DroidGap(11102): Paused the application! 
05-11 13:30:51.400: D/CordovaWebView(11102): Handle the pause 

我可以选择任意的四个和logcat中显示以下信息:

05-11 13:33:57.960: D/DroidGap(11409): onDestroy() 
05-11 13:33:57.960: D/CordovaWebView(11409): >>> loadUrl(javascript:try{cordova.require('cordova/channel').onDestroy.fire();}catch(e){console.log('exception firing destroy event from native');};) 
05-11 13:33:57.960: D/PluginManager(11409): init() 
05-11 13:33:57.970: D/CordovaWebView(11409): >>> loadUrlNow() 
05-11 13:33:58.120: D/OpenGLRenderer(11409): Flushing caches (mode 0) 
05-11 13:33:58.350: D/OpenGLRenderer(11409): Flushing caches (mode 1) 

一旦我选择了图片我想上传应用程序显示一条消息“不幸的是,进程已停止。”并显示以下LogCat消息:

05-11 13:40:06.750: D/DroidGap(11886): DroidGap.onCreate() 
05-11 13:40:06.770: D/CordovaWebView(11886): CordovaWebView is running on device made by: Motorola 
05-11 13:40:06.770: D/JsMessageQueue(11886): Set native->JS mode to 2 
05-11 13:40:06.770: D/DroidGap(11886): DroidGap.init() 
05-11 13:40:06.770: D/CordovaWebView(11886): >>> loadUrl(file:///android_asset/www/index.html) 
05-11 13:40:06.770: D/PluginManager(11886): init() 
05-11 13:40:06.780: D/CordovaWebView(11886): >>> loadUrlNow() 
05-11 13:40:06.780: D/DroidGap(11886): Incoming Result 
05-11 13:40:06.780: D/DroidGap(11886): Request code = 18 
05-11 13:40:06.780: D/DroidGap(11886): We have a callback to send this result to 
05-11 13:40:06.780: D/AndroidRuntime(11886): Shutting down VM 
05-11 13:40:06.780: W/dalvikvm(11886): threadid=1: thread exiting with uncaught exception (group=0x40a2f1f8) 
05-11 13:40:06.800: E/AndroidRuntime(11886): FATAL EXCEPTION: main 
05-11 13:40:06.800: E/AndroidRuntime(11886): java.lang.RuntimeException: Unable to resume activity {com.ubihealth/com.ubihealth.UbiHealth}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=18, result=-1, data=Intent { dat=content://media/external/images/media/7468 }} to activity {com.ubihealth/com.ubihealth.UbiHealth}: java.lang.NullPointerException 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2466) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2494) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2008) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1169) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.os.Looper.loop(Looper.java:137) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.main(ActivityThread.java:4446) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at java.lang.reflect.Method.invokeNative(Native Method) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at java.lang.reflect.Method.invoke(Method.java:511) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at dalvik.system.NativeStart.main(Native Method) 
05-11 13:40:06.800: E/AndroidRuntime(11886): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=18, result=-1, data=Intent { dat=content://media/external/images/media/7468 }} to activity {com.ubihealth/com.ubihealth.UbiHealth}: java.lang.NullPointerException 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.deliverResults(ActivityThread.java:3002) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2453) 
05-11 13:40:06.800: E/AndroidRuntime(11886): ... 12 more 
05-11 13:40:06.800: E/AndroidRuntime(11886): Caused by: java.lang.NullPointerException 
05-11 13:40:06.800: E/AndroidRuntime(11886): at org.apache.cordova.DroidGap.onActivityResult(DroidGap.java:858) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.Activity.dispatchActivityResult(Activity.java:4649) 
05-11 13:40:06.800: E/AndroidRuntime(11886): at android.app.ActivityThread.deliverResults(ActivityThread.java:2998) 
05-11 13:40:06.800: E/AndroidRuntime(11886): ... 13 more 
05-11 13:40:07.040: D/chromium(11886): Unknown chromium error: -6 
05-11 13:40:07.070: D/CordovaNetworkManager(11886): Connection Type: none 

任何想法是什么可以是我的错误?

更新:我已经更新了我与科尔多瓦2.6.0的项目,并试过上面的代码,它没有工作。 现在我已经用Cordova 2.7.0创建了一个新项目,并且刚刚从旧项目中复制了Cordova代码,并且它工作正常。

+0

我在Galaxy 5上测试过,它也不能正常工作。 – 2013-05-17 04:26:17

我在几个设备测试此代码与科尔多瓦2.7,并具有以下的结果:

Nexus 7 (4.2)      no problems 
HTC Sensation (2.3.4)    no problems 
HTC Evo 4g (2.2)     no problems 
Samsung Galaxy Tab 7.0 (4.0.4) Had the below Java error but JS seems to get the image 

(4.0.2 - 05-15 15:16:53.895:E/ActivityThread(3520) :活动 com.android.internal.app.ChooserActivity已泄漏IntentReceiver [email protected]这是 原来这里注册是否缺少调用 unregisterReceiver()

当我的同事从午餐回来时,将在Xoom平板电脑上进行测试。

+0

感谢您的帮助MBillau。 检查我的更新的问题。 – 2013-05-17 04:27:05

+0

不客气,对不起,我没能够测试Xoom ......它冻结了,我恢复了出厂设置,现在它在过去的几天里一直在运行! Arghhh!但很高兴你解决它! – MBillau 2013-05-20 14:01:17