web-dev-qa-db-fra.com

Activité tuée/onCreate appelée après avoir pris une photo via l'intention

J'essaie de prendre une photo en utilisant une intention. Mon problème est que parfois, après avoir pris une photo, mon activité, qui s'appelle startActivityForResult, semble être détruite, de sorte que onCreate est appelé à nouveau.

Voici mon code pour prendre des photos après avoir cliqué sur une image, quelle image doit être remplacée:

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");
    }
}

Donc, tout ce que j'essaie, c'est de prendre une photo et de remplacer l'image d'une imageview par celle-ci. Mais dans certains cas, onCreate est appelé après l'appel de onActivityResult et la nouvelle image est perdue.

L'aide est grandement appréciée.

31
Cattivo

En fait, la caméra provoque un changement d'orientation de votre activité, c'est pourquoi elle est détruite et recréée.

Ajoutez ceci dans votre fichier manifeste, cela empêchera le changement d'orientation et votre activité ne sera ni détruite ni recréée. 

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

Il semble que certains téléphones détruisent l'activité lors de l'importation d'une image, comme le Galaxy S3. Il est mentionné que si mon application est en mode portrait, cela se produira car les images sont en mode paysage. Ainsi, toutes les suggestions relatives à configChanges dans le fichier manifeste ne sont pas applicables à cette situation. 

Ce que j’ai fini par faire, c’est au lieu de lutter contre onDestroy de l’activité (ce qui a provoqué le non-appel du onActivityResult () du fragment après onCreate ()), mais aussi l’implémentation de onActivityResult () dans l’activité elle-même. chemin de l'image. Ensuite, j'ai transmis ce chemin au fragment, une fois celui-ci créé, pour traitement ultérieur. Bien sûr, je devais dire à mon application, une fois celle-ci recréée, qu'elle devait revenir au fragmnet en appelant pour traiter cette image.

1
Zvi

Corrigez l'orientation de votre activité/application car, lorsque vous changez d'activité, vous changez d'orientation, d'actualisation et de redémarrage automatique. 

1

Désactivez le paramètre de développeur "Ne pas conserver les activités". Sinon, l'activité que vous quittez sera détruite.

0
phnmnn