7
votes

L'activité est tuée lors de l'exécution de l'intention de la caméra

[edit: problème résolu. S'il vous plaît voir Ma réponse ci-dessous.] Strong>

dans mon application, j'appelle la caméra système pour prendre une photo , puis gérer le résultat dans OnActiVIVIVITURE code>. Vous savez, l'habituel. Cela fonctionnait, mais maintenant, mon activité d'appel est tuée pendant que je prends la photo. Spécifiquement, Ondestroy () code> est appelé mon activité juste après avoir appuyé sur l'obturateur de la caméra. La photo est prise et sauvegardée (j'ai vérifié que le fichier est écrit sur la carte SD). Après avoir accepté la photo, au lieu de revenir à l'activité d'appel et appelez OnActiVIVIVIVITURE CODE>, l'activité précédente dans la pile d'activités est appelée. Je ne vois aucune exception dans le logcat. Mon gestionnaire d'exception personnalisé n'est pas appelé. Si cela importe, mon application inclut également un service qui écoute les mises à jour GPS, mais je désenregistre tous les récepteurs dans Onpause () Code>. p>

voici la pile d'appels pour myCallingactivity.ondestroy () code>: p> xxx pré>

Voici comment je démarre l'activité de la caméra, dans cas, vous vous demandez: P>

protected void startCamera() {
    createPhotoDirsIfNeeded();

    String fileName = "temp.jpg";  
    ContentValues values = new ContentValues();  
    values.put(MediaStore.Images.Media.TITLE, fileName);  
    m_capturedImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  

    m_photoFileName = APP_PHOTO_PATH + "/" + DateFormat.format(DATE_FORMAT, Calendar.getInstance().getTime()) + ".jpg";
    File picFile = new File(m_photoFileName);
    if(picFile.exists()) {
        picFile.delete();
    }

    // start the camera activity
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,  Uri.fromFile(picFile));
    startActivityForResult(intent, IntentHelper.REQUEST_TAKE_PHOTO);
}


7 commentaires

Code postal correspondant. Il semble que votre application de Code Keurting puisse appeler des commandes liées à la tuerie.


Posté encore plus de code. OnActivityResult () Jamais appelé parce que l'activité est détruite au moment où je retourne de la caméra.


Dans NewplaceDetailsActivity.ondestroy () , vérifiez si isfinissant () retourne vrai. Sinon, votre activité est en train d'être détruite pour être redémarré (peut-être à cause d'un changement d'orientation pendant que l'image était prise).


isfinant () renvoie vrai. Je me suis également assuré de ne pas changer l'orientation cette fois-ci. En outre, même si elle redémarre en raison d'un changement d'orientation, onActivityResult serait toujours appelé, non?


Premièrement, il est éventuellement possible que votre processus soit terminé, libérer la mémoire. Il n'y a rien de mal à cela. En ce qui concerne votre exception, vous piégeez l'exception dans Eclipse. Laissez l'exécution procéder, puis examinez la trace de pile de logcat. S'il est toujours dit que vous avez un problème sur la ligne 303 dans votre NewplaceDétailSactivité , vous devrez examiner ce qui est sur cette ligne.


@Commonsware: Je n'ai aucune exception. Je viens de définir un point d'arrêt pour confirmer que mon activité est en effet détruite. Lorsque je supprimai le point d'arrêt, l'activité n'est pas ré-créée (que j'attendrais) et que l'activité précédente dans la pile est ouverte.


Dupliqué possible de Android: Activité Détruite après avoir appelé l'intention de la caméra


3 Réponses :


2
votes

Je suppose que le problème est 1) Dans votre implémentation personnalisée du gestionnaire d'exceptions et 2) Cette ligne:

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(picFile));


4 commentaires

J'ai eu le même problème avec l'extra_output. Il semble que Android ne t'aime pas spécifier un dossier de sortie. Ceci est plus critique pour la vidéo où la mémoire tampon et la diffusion en continu est impliquée. J'ai résolu le problème en attendant que la photo ou la vidéo soit prise, puis de la déplacer où l'utilisateur veut que ce soit.


Bonjour - J'ai supprimé la ligne où je spécifie le nom du fichier. J'ai également supprimé le gestionnaire d'exception personnalisé (qui n'a été activé que pour déboguer cette question en premier lieu). Le problème est toujours là cependant. Donc, il doit y avoir autre chose.


Tu n'as pas d'exception? Montrez votre OnActivityResult code.


@ A.ch.: OnActivityResult n'a jamais été appelé. J'ai découvert pourquoi, s'il vous plaît voir ma propre réponse.



8
votes

OK, j'ai trouvé le problème. La question n'était pas tellement que l'activité a été tuée, mais que ce n'était pas restauré. J'ai réalisé que cela peut arriver lorsque votre activité est déclarée dans le manifeste avec android: nohistory = "vrai" . Donc, l'activité a été retirée de la pile lors de sa mort et l'activité précédente a été montrée à la place.

Après avoir supprimé le paramètre nohistory , l'activité a commencé à apparaître à nouveau après l'utilisation de la caméra.


3 commentaires

Je pense que c'est un problème de changement d'orientation. Vous pouvez également résoudre ce problème de votre fichier manifeste.


Non, ce n'est pas le changement d'orientation. Je me suis assuré que l'orientation est restée la même pendant mes tests.


Oh Yeah Android: NoHistory = "TRUE" Si vous gardez cela signifie que vous ne surveillez pas l'état de l'activité, c'est simplement un moyen simplement lorsque le contrôle s'éloigne de votre activité sa mort par le système.



0
votes

Veuillez suivre ces étapes: xxx

Si ce code ne fonctionne pas pour vous, veuillez vous reporter aux liens suivants:


1 commentaires

Hey, merci. J'ai effectivement trouvé le problème (voir ma propre réponse).