You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Alan Neveu (JIRA)" <ji...@apache.org> on 2013/12/09 20:00:08 UTC
[jira] [Commented] (CB-2533) App crashes after taking a picture
with the camera
[ https://issues.apache.org/jira/browse/CB-2533?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13843409#comment-13843409 ]
Alan Neveu commented on CB-2533:
--------------------------------
I can confirm, anecdotally, that this issue has decreased significantly since we upgraded to 2.9.0. However, it seems to have happened a bit more regularly since upgrading to 3.1.0. At this point I think it has to do with the memory management settings that Samsung is shipping in their latest S4 line, which seems to be causing Android to get really aggressive with reclaiming memory from apps that are not in the foreground. We are trying to reproduce so that we can code around it by writing temporary files to the file system before calling getPicture and then deleting those temporary files when the callback is successful. Then we plan to check for those temporary files when the app is launched and attempt to recover if they are found. It is a tricky issue for security reasons, of course, but it seems to be the only way to really work around this.
> App crashes after taking a picture with the camera
> --------------------------------------------------
>
> Key: CB-2533
> URL: https://issues.apache.org/jira/browse/CB-2533
> Project: Apache Cordova
> Issue Type: Bug
> Components: Android
> Affects Versions: 2.4.0
> Environment: Samsung Galaxy S3, Android 4.1.1
> Reporter: Dean Kooiman
> Assignee: Joe Bowser
> Priority: Trivial
>
> Hi,
> I found a bug in cordova during tests on my Samsung Galaxy S3 with android 4.1.1
> I have tried using both camera.getPicture as well as capture.captureImage
> In both cases the CameraLauncher successfully starts.
> Both functions only succeed when the user takes a picture in landscape mode (phone is horizontal). When the picture is taken in portrait mode (phone vertical) the application will fail with a NPE in DroidGap, this is due to DroidGap loosing its reference to the activityResultCallback when its orientation changes.
> I am able to reproduce this using the default creation and camera examples:
> 1. Create the project: C:\Programming\cordova\cordova-android\framework>bin\create C:\Users\dean\workspace-android\DeanTest2 com.kooiman DeanTest2
> 2. Overwrite assets/www/index.html with the complete example from: http://docs.phonegap.com/en/2.4.0/cordova_camera_camera.md.html#Camera
> 3. Deploy the application to a Samsung Galaxy S3
> 4. Take a picture in portrait mode and see the failure.
> I can successfully get the callback by caching the reference when the Activity is destroyed, however the page is reloaded on orientation changes as well (so my image is rendered and immediately cleared). In-fact if you were to take a picture in Landscape or show an image from the library and then changed the orientation the images are removed, due to page reload.
> Here is my code to at least get past the NPE: (Still would like a fix for the page reload on orientation changes)
> public class DeanTest2 extends DroidGap
> {
> private static final Object CALLBACK_LOCK = new Object();
> private static CordovaPlugin destroySafeActivityCallback = null;
>
> @Override
> public void onCreate(Bundle savedInstanceState)
> {
> super.onCreate(savedInstanceState);
> synchronized(CALLBACK_LOCK) {
> if (destroySafeActivityCallback != null) {
> activityResultCallback = destroySafeActivityCallback;
> destroySafeActivityCallback = null;
> }
> }
>
> super.loadUrl(Config.getStartUrl());
> }
>
> @Override
> public void onDestroy() {
> if (activityResultCallback != null) {
> synchronized(CALLBACK_LOCK) {
> destroySafeActivityCallback = activityResultCallback;
> }
> }
>
> super.onDestroy();
> }
> }
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)