Phone camera crash when receiving data

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

There seems to be some kind of problem with the HTC Desire camera and this version of Phonegap. The problem is that HTC is returning camera specifications on Android.

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

I use phonegap to rewrite the code of my previous application, but I do not need to use the camera API. When I used it on a real phone, it crashed after taking a photo, and I got this error with 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 

Does anyone know why this is happening?

This is my Camera.js

This is my 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); } 

Hope this helps

Thanks to everyone, by the way

+6
source share
4 answers

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

There seems to be some kind of problem with the HTC Desire camera and this version of Phonegap. The problem is that HTC is returning camera specifications on Android.

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

This code works fine for me, I only have a .js link to this code in the index and a button with the capturePhoto () function.

Hope this helps someone fix their problems.

 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); } 
+1
source

I just helped a person with the same error on the PhoneGap release list. I believe you are missing permission:

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

from your AndroidManifest.xml file. We need to be able to write the captured image to a .jpg file.

+4
source

I had the same problem when I set minSdkVersion in AndroidManifest.xml to 7. I do not experience this problem when I use minSdkVersion = "2".

+2
source

EDIT

Initially, I thought that cleaning my application on my phone and reinstalling it fixed the problem. It turns out that this is not so. I found out that there is a problem when the PhoneGap application is uninstalled using the Android Garbage Collection when trying to capture an image from the camera. After hours of searching, the solution I ended up using was using the foreground camera plugin . This plugin creates its own camera inside the application in such a way that you do not need to worry about garbage collection that collects it.

Unfortunately, it is not fully turned on, and most camera settings are not accessible to the user. It also only supports Cordova 2.4.0, which means that I had to abandon 2.7.0. This solution will work for my current application, hopefully next I will write that there will be a better solution. Hope this helps someone!

+1
source

Source: https://habr.com/ru/post/899193/


All Articles