I'm developing a mobile app with cordova/phonegap and I've installed Camera plugin. I am able to open the camera and click the image but after that app crashes. here is the crash log:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=34, result=-1, data=null} to activity {com.phonegap.helloworld/com.phonegap.helloworld.CordovaApp}: java.lang.IllegalArgumentException: filename cannot be null
E/AndroidRuntime(22226): at android.app.ActivityThread.deliverResults(ActivityThread.java:3510)
E/AndroidRuntime(22226): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3553)
E/AndroidRuntime(22226): at android.app.ActivityThread.access$1200(ActivityThread.java:165)
E/AndroidRuntime(22226): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374)
E/AndroidRuntime(22226): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(22226): at android.os.Looper.loop(Looper.java:176)
E/AndroidRuntime(22226): at android.app.ActivityThread.main(ActivityThread.java:5455)
E/AndroidRuntime(22226): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(22226): at java.lang.reflect.Method.invoke(Method.java:525)
E/AndroidRuntime(22226): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
E/AndroidRuntime(22226): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
E/AndroidRuntime(22226): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(22226): Caused by: java.lang.IllegalArgumentException: filename cannot be null
E/AndroidRuntime(22226): at android.media.ExifInterface.<init>(ExifInterface.java:121)
E/AndroidRuntime(22226): at org.apache.cordova.camera.ExifHelper.createOutFile(ExifHelper.java:66)
E/AndroidRuntime(22226): at org.apache.cordova.camera.CameraLauncher.processResultFromCamera(CameraLauncher.java:430)
E/AndroidRuntime(22226): at org.apache.cordova.camera.CameraLauncher.onActivityResult(CameraLauncher.java:610)
E/AndroidRuntime(22226): at org.apache.cordova.CordovaActivity.onActivityResult(CordovaActivity.java:784)
E/AndroidRuntime(22226): at android.app.Activity.dispatchActivityResult(Activity.java:5563)
E/AndroidRuntime(22226): at android.app.ActivityThread.deliverResults(ActivityThread.java:3506)
E/AndroidRuntime(22226): ... 11 more
code that I have used to open the camera is :
var pictureSource; // picture source
var destinationType; // sets the format of returned value
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
// alert("ready-----")
pictureSource = navigator.camera.PictureSourceType;
destinationType = navigator.camera.DestinationType;
}
function capturePhoto() {
alert(navigator.camera);
navigator.camera.getPicture(onPhotoDataSuccess, onFail, {
quality: 20,
destinationType: destinationType.FILE_URI,
targetWidth: 200,
targetHeight: 200,
saveToPhotoAlbum: true,
sourceType: pictureSource.CAMERA
});
}
function onPhotoDataSuccess(imageURI) {
// alert("success--");
var smallImage = document.getElementById('smallImage');
smallImage.style.display = 'block';
smallImage.src = imageURI;
// smallImage.src = "data:image/jpeg;base64," + imageData;
}
function onFail(message) {
alert('Failed because: ' + message);
}
The bug is already logged in Apache Cordova.
Help!!!
Try replacing your capturePhoto() function with this (this is working code from my own app):
function capturePhoto() {
var options = {
quality: 75,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.CAMERA,
mediaType: Camera.MediaType.CAMERA,
encodingType: Camera.EncodingType.JPEG,
targetWidth: 200,
targetHeight: 200,
saveToPhotoAlbum: true
};
navigator.camera.getPicture(onPhotoDataSuccess, onFail, options);
}
please change your destination type:
destinationType: destinationType.FILE_URI
to
destinationType: Camera.DestinationType.FILE_URI
if you required it as a base64-encoding image, then change destination type as:
destinationType: Camera.DestinationType.DATA_URL
also make sure that you have added the write external storage permission in your manifest file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With