Android intención de recepción y rotación
rotation screen-orientation (4)
Esta es una solución bastante simple. En su archivo de manifiesto, ubique la actividad y agregue esto:
android:configChanges="keyboardHidden|orientation"
Esto evitará que tu lógica en onCreate vuelva a dispararse (o eso creo)
Citado desde aquí :
En algunos casos especiales, es posible que desee omitir el reinicio de su actividad en función de uno o más tipos de cambios de configuración. Esto se hace con el atributo android: configChanges en su manifiesto. Para cualquier tipo de cambios de configuración que diga que maneja allí, recibirá una llamada a su actividad actual en el método Configuración de Configuración (Configuration) en lugar de reiniciarse. Sin embargo, si un cambio de configuración involucra alguno que no maneje, la actividad aún se reiniciará y no se invocará en Configuración Cambiada (Configuración).
Estoy usando un Filtro de intención en mi actividad para recuperar una URL en la que el usuario hizo clic.
En mi actividad en el método Crear, tengo el siguiente código
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
url = intent.getDataString();
showDialog(DIALOG_ID);
}
Funciona muy bien, excepto cuando giro mi teléfono. Incluso si el diálogo se cerró antes de la rotación, se vuelve a abrir cada vez que cambio la orientación del teléfono. Puedo evitar eso.
Para su información, no quiero bloquear la orientación
Otra solución que no requiere el manejo de los cambios de configuración puede ser simplemente verificar si el parámetro SavedInstanceState Bundle en onCreate es nulo antes de mostrar el cuadro de diálogo.
Si observa los documentos de onCreate, puede ver que savedInstanceState no será nulo cuando se recrea la actividad (debido a cambios de configuración, por ejemplo) y, por lo tanto, será nulo cuando la actividad se ejecute de manera reciente.
Por lo general, llamaría a setIntent(null)
para eliminar la intención utilizada para convocar la actividad. Sin embargo, en la práctica, no siempre funciona. Aparentemente, una solución común es establecer la acción o los datos del intento, o ambos, en nulos, dependiendo de lo que use en el código. En su caso, después de mostrar el diálogo, probablemente iría con intent.setAction(null)
.
Nunca he visto este problema hasta hoy. Hice getIntent().setAction("");
y lo resolvió No más daño cerebral :)