Cattivo
Cattivo

Reputation: 752

Activity killed / onCreate called after taking picture via intent

I am trying to take a picture using an intent. My problem is that sometimes after taking a picture my activity, which calls startActivityForResult, seems to be destroyed so that onCreate is called again.

Here is my code for taking pictures after clicking an imageview, which image should be replaced:

if (!getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) {
            Util.makeLongToast(R.string.lang_no_camera);
        } else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_ITEM_PHOTO);
        }

...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v(TAG, "onactivityresult called");
    if (requestCode == TAKE_ITEM_PHOTO) {
        if (data != null) {

            imageUri = data.getData();


                try {
                    img_photo.setImageBitmap(Media.getBitmap(
                            getContentResolver(), imageUri));
            } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        } else
            Log.w(TAG, "data is null");
    }
}

So all i try is to take a picture and replace the image of an imageview with it. But in some cases onCreate is called after onActivityResult was called and the new image is lost.

Help is greatly appreciated.

Upvotes: 35

Views: 16146

Answers (4)

phnmnn
phnmnn

Reputation: 13230

Disable "Don't keep activities" Developer setting. Otherwise it will destroy the activity you are leaving.

Upvotes: 1

Zvi
Zvi

Reputation: 2424

It seems that there are phones that destroys the activity when importing an image, such as Galaxy S3. It is mentioned that if my app is in portrait mode it will happen because the images are in landscape mode. Thus, all the suggestions related to configChanges in the manifest file are not applicable to this situation.

What I ended up doing is instead of fighting the onDestroy of the activity (that caused the onActivityResult() of the fragment not to be called after onCreate()) was to implement onActivityResult() also in the activity itself and there I could get the image path. Then I passed that path to the fragment, once it is being created, for further processing. Of course I had to tell my app, once it is recreated, that it needs to go back to the calling fragmnet to process that image

Upvotes: 1

Akram
Akram

Reputation: 7526

Actually the camera causes the orientation change in your activity that is why your activity is being destroyed and recreated.

Add this in your manifest file it will prevent the orientation change and your activity will not get destroyed and recreated.

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait" >
</activity>

Upvotes: 112

Krishnakant Dalal
Krishnakant Dalal

Reputation: 3578

Fix the Orientation of your Activity/Application because when you back/finish() activity and at the same time you change orientation then activity refresh and restart again automatically.

Upvotes: 1

Related Questions