picture - onactivityresult camera android
Android: Actividad destruida después de llamar a Camera Intent (6)
Estoy teniendo dos actividades (A1, A2). A1 llama a A2 y desde A2 estoy llamando a la cámara intento como a continuación
launchIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoPath);
startActivityForResult(launchIntent,CAMERA_REQUEST);
Abre la cámara, y puedo tomar la foto. Pero el Problema surge una vez que hago clic en el botón guardar (marque el botón en s3), mi onActivityResult no se llama sino que se llama al método onDestroy de A2. Tengo pocas lógicas para hacer en el onActivityResult fn.
Había leído alguna publicación en Stackoverflow con respecto a esto, pero no pude obtener resultados útiles de eso. Tengo mi manifiesto así para mi segunda Actividad (A2)
android:configChanges="keyboardHidden|orientation|locale"
android:screenOrientation="portrait
Nota: En HTC One X mi onActivityResult fn se está llamando, pero en mi S3 se está destruyendo la segunda actividad (A2)
Por favor comparte tus pensamientos sobre esto. Gracias por adelantado
Asegúrese de no tener activada la configuración del desarrollador "No mantener actividades", ya que destruirá la actividad que está dejando.
Iniciar la cámara requiere mucha memoria. Por lo tanto, en dispositivos con poca memoria, el sistema Android cierra las actividades que se ejecutan en segundo plano y, por lo tanto, se llama a onCreate (). Debido a este fotoproyector que ha dado se convierte en nulo y no podrá obtener la imagen guardada.
La solución es guardar el fotoproyector mientras el sistema está destruyendo su actividad y luego restaurarlo nuevamente.
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onRestoreInstanceState(savedInstanceState);
}
y en caso de que estés haciendo esto en Fragment.
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath));
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onViewStateRestored(savedInstanceState);
}
La aplicación de la cámara requiere mucha memoria y para liberar memoria, el sistema operativo tiene que matar las aplicaciones en segundo plano, incluida la suya. Esto es normal para todas las aplicaciones de Android. Su actividad será recreada cuando la aplicación de cámara regrese. Para conservar la información del estado de la actividad, anule onSaveInstanceState()
para almacenar sus datos y volver a onCreate()
en onCreate()
.
Mi actividad tiene muchas tareas en ejecución cuando estoy llamando a Camera Intent. Tengo oyentes de ubicación GPS y muchas más tareas.
Cuando regresa de la intención de la cámara, necesito agregar un marcador en un mapa en la ubicación en que se tomó la imagen. Por lo tanto, si el usuario tomó más de una imagen, debería mostrar marcadores para cada imagen.
Si destruye mi Actividad cada vez que llamo a Camera Intent, toda la información que tenía antes sobre los marcadores y su ubicación se perderán. Y también, tendré que inicializar el mapa nuevamente. Ese es un gran problema para mi aplicación.
Y sí, solo sucede cuando tomo una foto en modo Paisaje. Si tomo la fotografía en retrato, todo está bien hasta ahora ...
Trataré de usar android:configChanges="orientation|screenSize"
Como se sugiere aquí ... ¡Espero que ayude!
Para mí, sucede cuando habilito una opción en el Modo desarrollador llamada " No mantener actividades ". Después de desmarcarlo, la actividad no se volverá a crear mientras retrocede al elegir una imagen de la galería o de la aplicación de la cámara.
Tuve el mismo problema. Seré una locura, pero finalmente he encontrado una solución here . el problema es que cuando haces clic en el botón "Guardar" de la cámara, el método de orientación de cambio de llamada de actividad se destruye y se vuelve a crear. intenta establecer
android:configChanges="orientation|screenSize"
en el manifiesto de Android (no solo android:configChanges="orientation"
porque como se sugiere here , no funciona para el nivel API 13 o superior).
evita que se destruya la actividad, funciona para mí.