2012-06-21 16 views
5

Ecco un interessante ...Android orientamento - problemi con intenti (fotocamera)

Ho un'applicazione che sto scrivendo per i dispositivi con sistema operativo Android 2.3.3 e superiori.

Ha un'attività principale che chiama la telecamera tramite un intento.

Se l'utente fa clic su un pulsante per avviare la fotocamera; poi scatta una foto; quindi fa clic su "Fatto" per tornare all'attività principale: l'applicazione funziona correttamente e visualizza la nuova immagine in una visualizzazione di immagini sull'attività principale.

tuttavia, se l'utente utilizza l'attività principale in orientamento verticale; quindi fa clic sul pulsante per aprire l'intento della telecamera e cambia l'orientamento in orizzontale; quindi fare clic su fatto per tornare all'attività principale - l'applicazione si blocca

ma poi ... tuttavia, se l'utente utilizza l'attività principale in orientamento verticale; quindi fa clic sul pulsante per aprire l'intento della telecamera e cambia l'orientamento in orizzontale; quindi cambia l'orientamento in verticale (nella fotocamera) prima di fare clic su fatto per tornare all'attività principale - quindi l'applicazione continua a funzionare normalmente.

Stuff ho cercato: Ho cambiato il file manifesto per forzare l'applicazione (attività principale) deve essere orientato in verticale (ho anche rimosso questa) Ho aggiunto questa riga per l'attività principale nel tentativo di gestire la ri-disegno delle attività su di esso tornare dalla fotocamera intento:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Nella finestra di debug ricevo errori descrivendo eccezioni nullpointer - credo che questo è perché il punto di vista non ci sono più, dopo un cambio di orientamento per l'immagine da passare a meno che l'orientamento sia lo stesso di quando è stato lasciato.

Sono un po 'bloccato quindi apprezzerei qualche consiglio.

+0

http://i56.tinypic.com/2iu97on.jpgh logcat del crash – max4ever

+0

http://stackoverflow.com/questions/14066038/why-image-captured-using-camera-intent-gets-rotated-on -some-devices-in-android –

risposta

3

Quando l'orientamento dello schermo cambia, il tuo Activity viene distrutto e ricreato nel nuovo orientamento. Quindi tutte le variabili che hanno ottenuto un riferimento durante la vita dello Activity non faranno più riferimento a nulla e, se tentate di accedere agli oggetti a cui si riferiscono senza riassegnare i valori, otterrete uno NullPointerException.

Il metodo onSaveInstanceState() viene utilizzato per salvare i dati temporanei tra le modifiche di configurazione. Questo crea un pacchetto che viene passato a onCreate() quando lo Activity si riavvia.

Senza alcun codice, non so se questo è il tuo problema, ma vale la pena dare un'occhiata.

Vedere http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges per ulteriori informazioni (e informazioni più accurate di quelle che ho fornito, senza dubbio).

+0

Grazie per il suggerimento. Durante le mie indagini, ho effettivamente trovato due incidenti che dovevo affrontare. Il primo crash è stato risolto inserendo questi due metodi nella mia attività principale: – agrodude

1

ehi non sono sicuro, ma cercare di mettere questa proprietà nel file manifesto si spera dovrebbe funzionare

android:configChanges="orientation|keyboardHidden" 
+0

Probabilmente funzionerebbe, ma non è raccomandato da Google come qualcosa di diverso da un'ultima risorsa - vedi http://developer.android.com/guide/topics/ resources/runtime-changes.html # HandlingTheChange – Spinner

+1

Anche questo non funziona :( – NarendraJi

+0

@DroidWormNarendra dimmi cosa vuoi fare con la tastiera virtuale? –

0

Alcuni dispositivi Android come Samsung S3 e S4 hanno vista superficie della macchina fotografica predefinita in modalità orizzontale. Quando si chiama la fotocamera e si acquisisce l'immagine e si giunge alla propria applicazione, indipendentemente dal fatto che sia stato impostato l'orientamento RITRATTO, esso si aprirà prima in modalità LANDSCAPE e quindi passerà alla modalità RITRATTO.

Il suo comportamento del sistema operativo Android. A causa di questa attività si ricrea da solo. In quel momento stai ricevendo Null Pointer Exception. È possibile gestire impostando configChanges nel file manifest.

android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 

ed è possibile memorizzare i dati temporanei nel onSaveInstanceState() giustamente detto da @Spinner nella sua risposta.

Problemi correlati