2012-05-07 6 views
1

Je rencontre un problème lorsque j'utilise l'application appareil photo pour prendre une photo & la photo est en cours de suppression avant que je puisse l'utiliser dans mon application. Semble à se produire uniquement sur certains appareils (Samsung Galaxy S2, Samsung Galaxy Tab 10.1, et un LG., Ne me souviens pas du modèle). Chaque activité de mon application définit l'orientation de l'écran sur portrait (manifeste: android: screenOrientation = "portrait"). Comment je peux reproduire le problème: 1. Appuyez sur le bouton "Prendre une photo" de mon application, cela charge l'application de la caméra. 2. Prenez une photo en mode portrait, ce qui crée le fichier à l'emplacement approprié (en fonction de l'URI fourni) & affiche un aperçu dans l'application appareil photo. 3. Gardez l'appareil dans le portrait & appuyez sur "Enregistrer l'image" (qui vous ramène à mon application). 4. Lorsque je retourne à mon application, je vérifie si le fichier existe, et ce n'est pas le cas. Si vous prenez la photo en mode portrait, puis faites pivoter l'appareil en mode paysage (lorsque l'aperçu est affiché), puis cliquez sur «Enregistrer l'image» (en mode paysage), la photo n'est pas supprimée.Android - Intention de l'appareil photo - photo supprimée

Si vous prenez la photo en mode paysage (et laissez l'appareil en mode paysage lorsque vous appuyez sur Enregistrer), la photo n'est pas supprimée.

Si vous prenez la photo en mode paysage, faites pivoter l'aperçu en mode portrait, la photo n'est pas supprimée.

J'ai lu & googled & ai tiré mes cheveux en essayant de comprendre celui-ci.

Lorsque la photo est prise & enregistrée en mode portrait, lorsqu'elle est renvoyée à mon application, mon application est en mode paysage, puis elle passe en mode portrait.

Toute aide (même si c'est un lien vers un autre poste qui a la réponse) est appréciée!

Merci :)

Voici mon code (lorsque le problème se produit, _cameraFileUri est null):

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     _cameraFileUri = Uri.fromFile(new File(_tempFolder, "tempFromCamera.jpg")); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, _cameraFileUri); // set the image file name 

     // start the image capture Intent 
     startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 


        if (_cameraFileUri != null) { 

        File origFile = new File(_cameraFileUri.getPath()); 

        resizePhoto(origFile); 

        showPhoto(); 

       } else { 
        Toast.makeText(getApplicationContext(), "Error: Capture Photo Failed.", Toast.LENGTH_LONG).show(); 

       } 
+0

Remarque: startActivityForResult est réellement entouré d'un bloc try/catch dans sa propre routine. Le if (_cameraFileUri! - null) est dans "onActivityResult", dans un bloc de code que je vérifie le code de résultat, etc. J'ai omis tout cela à partir de mon post et après relecture, il semble un peu étrange. Je voulais clarifier :) – Chris

+0

J'ai honnêtement attendu une bonne semaine avant de poster dans ce forum. Je savais que dès que je l'aurais posté, je trouverais la réponse. L'application en rotation était le cadeau. Il recréait l'activité, il était donc réexécuté la méthode onCreate. Pour "housekeeping", je supprime les fichiers dans mon dossier temporaire. Je fais cela dans "onCreate". Donc, l'application tourne, réexécute "onCreate", ce qui supprime mon fichier temporaire de stockage (duh). :) – Chris

+1

bien vous avez compris. Il m'a fallu du temps pour me rendre compte que vous me disiez que vous l'avez résolu. Faites votre commentaire plus clair afin que personne ne va passer du temps à enquêter – png

Répondre

0

Désolé, celui-ci est résolu. J'ai honnêtement attendu une semaine avant de poster sur ce forum. Je savais que dès que je l'aurais posté, je trouverais la réponse.

L'application en rotation était le cadeau. Il recréait l'activité, il était donc réexécuté la méthode onCreate. Pour "housekeeping", je supprime les fichiers dans mon dossier temporaire. Je fais cela dans "onCreate". Donc, lors de la réexécution d'onCreate, il supprimait la photo que l'appareil photo avait placée dans le dossier Temp.