2012-06-21 33 views
5

Aquí es interesante ...orientación Android - problemas con las intenciones (cámara)

Tengo una aplicación que estoy escribiendo para dispositivos con Android 2.3.3 o superior.

Tiene una actividad principal que llama a la cámara a través de un Intento.

Si el usuario hace clic en un botón para iniciar la cámara; luego toma una foto; luego hace clic en "Listo" para volver a la actividad principal: la aplicación funciona bien y muestra la nueva imagen en una vista de imagen de la actividad principal.

sin embargo, si el usuario usa la actividad principal en orientación vertical; luego hace clic en el botón para abrir la intención de la cámara y cambia la orientación a horizontal; luego haz clic en "hecho" para regresar a la actividad principal - la aplicación falla

pero luego ... sin embargo, si el usuario usa la actividad principal en orientación vertical; luego hace clic en el botón para abrir la intención de la cámara y cambia la orientación a horizontal; luego cambia la orientación de nuevo a retrato (en la cámara) antes de hacer clic en "done" para regresar a la actividad principal, luego la aplicación continúa ejecutándose normalmente.

cosas que he intentado: me han cambiado el archivo de manifiesto para forzar la aplicación (actividad principal) a orientarse en el retrato (También he quitado este) he añadido esta línea a la actividad principal en un intento de manejar el nuevo trazado de la actividad en él regresara de la cámara intención:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

en la ventana de depuración recibo errores que describe excepciones de puntero nulo - Creo que esto es debido a que los puntos de vista ya no están allí después de un cambio de orientación para la imagen que se debe pasar a menos que la orientación sea la misma que cuando se dejó.

Estoy un poco atascado así que agradecería algunos consejos.

+0

http://i56.tinypic.com/2iu97on.jpgh Logcat del accidente – max4ever

+0

http://stackoverflow.com/questions/14066038/why-image-captured-using-camera-intent-gets-rotated-on -algunos dispositivos en Android –

Respuesta

3

Cuando cambia la orientación de su pantalla, su Activity se destruye y vuelve a crear con la nueva orientación. Por lo tanto, las variables que obtuvieron una referencia durante la vida del Activity ya no se referirán a nada, y si luego intenta acceder a los objetos a los que se refieren sin reasignarlos, obtendrá un NullPointerException.

El método onSaveInstanceState() se utiliza para guardar datos temporales entre cambios de configuración. Esto crea un paquete que se pasa al onCreate() cuando el Activity se inicia nuevamente.

Sin ningún código, no sé si ese es su problema, pero vale la pena echarle un vistazo.

Consulte http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges para obtener más información (e información más precisa que la que he proporcionado, sin duda).

+0

Gracias por la sugerencia. Durante mi investigación, en realidad encontré dos accidentes con los que tuve que lidiar. El primer bloqueo se resolvió insertando estos dos métodos en mi actividad principal: – agrodude

1

bueno no estoy seguro, pero intenta poner esta propiedad en el archivo de manifiesto de esperar que debería funcionar

android:configChanges="orientation|keyboardHidden" 
+0

Eso probablemente funcionaría, pero Google no lo recomienda como algo más que como último recurso: consulte http://developer.android.com/guide/topics/ resources/runtime-changes.html # HandlingTheChange – Spinner

+1

Esto tampoco funciona :( – NarendraJi

+0

@DroidWormNarendra dime que es exactamente lo que quieres hacer con el teclado virtual? –

0

Algunos dispositivos Android como Samsung S3 y S4 tienen vistas superficie de la cámara por defecto en el modo horizontal. Cuando llamas a la cámara y capturas la imagen y vienes a tu aplicación, ya sea que hayas establecido la orientación RETRATO, primero se abrirá en modo LANDSCAPE y luego cambiará al modo RETRATO.

Su comportamiento de sistema operativo Android. Debido a esta actividad, se vuelve a crear a sí mismo. En ese momento, recibirá la excepción del puntero nulo. Puede manejarlo configurando configChanges en el archivo de mensuario.

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

y puede almacenar los datos temporales en onSaveInstanceState() bien dice @Spinner en su respuesta.

Cuestiones relacionadas