OnCreate () se llama cuando se vuelve a abrir desde una tarea reciente después de cambiar la configuración del permiso
El título de la pregunta puede sonar complicado pero aquí está mi situación.
Tengo un fragmento de mapa dentro de una actividad. Sencillo. Activar el permiso de almacenamiento para permitir la visualización de mapa, funciona bien. Fondos de la aplicación mediante el botón Inicio, a continuación, desactive el permiso de almacenamiento y abra la aplicación de la tarea reciente, la aplicación se bloquea.
- Explorando checkCallingOrSelfPermission () para el ataque de escalado de privilegios
- Android 5 (HTC) EACCES (Permiso denegado)
- No se puede resolver el símbolo Manifest.permission.READ_PHONE_STATE
- ¿Por qué mi aplicación de mapa se bloquea si configuro maxSdkVersion en el permiso WRITE_EXTERNAL_STORAGE?
- ¿Qué pasará con aplicaciones que no se actualizan y que ejecutan código que requiere un permiso que el usuario desautorizado en Android 6.0 Marshmallow
El problema es en lugar de llamar onResume () de la actividad del host, onCreate () se llama en la actividad del host, así como onCreateView () del fragmento de mapa. Así está lanzando Excepciones.
Parece que el proceso de la aplicación se pierde cuando se cambia el permiso y, por tanto, se recrea la actividad.
09-24 14:42:55.071: E/AndroidRuntime(12918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 09-24 14:42:55.071: E/AndroidRuntime(12918): Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:718) 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
Desde super.onStart () de la Actividad
- ¿Cómo puede la aplicación de configuración iniciar la actividad no exportada de una aplicación?
- ¿Cómo uso la concesión de adb o la revocación de adb?
- ¿Cuál es la mejor manera de comprobar los permisos en tiempo de ejecución mediante la arquitectura MVP?
- ¿El aviso de la aplicación de Marshmallow revoca la notificación?
- Android: obtener el ID de usuario sin requerir permisos de miedo (para el usuario)?
- Permisos de Android
- Forzar la aplicación a reiniciar desde la primera Actividad (cuando se deniega un permiso)
- Los teléfonos de Redmi no piden permisos de SMS y por lo tanto no leen sms
La solución viable ahora es simplemente llamar a getSupportFragmentManager().popBackStackImmediate();
In onCreate () de la Actividad para evitar que se intente recrear el fragmento de mapa.
PopBackStack () no funcionará en este caso, ya que es asíncrono.
Probablemente un poco tarde, todavía podría ayudar a otros en el futuro 🙂
Debería comprobar si savedInstanceState
es null
que se pasa a onCreate(Bundle savedInstanceState)
. Si sólo es null
, inicie el Fragment
manera:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_file); if (savedInstanceState == null) { // do fragment transactions here } }
Estaba teniendo problemas similares con el cambio dinámico en el permiso de la aplicación. Después de algunos cavar lo que entendí podría ser útil para usted también.
Cambiar el permiso causa la terminación de su aplicación por el sistema y ahora si abre su aplicación desde la pantalla de resumen, se reiniciará su aplicación, que es la razón principal de su bloqueo, ya que podría estar realizando una operación en el objeto fragmento, que es nulo ahora .
Un punto importante a destacar aquí es que antes de que el estado del fragmento de terminación se guarde en el objeto savedinstance.
Para detener el bloqueo debe obtener instancia de fragmento utilizando esta línea de código –
mapFragment = (MapFragment)getSupportFragmentManager().findFragmentByTag("MAP FRAG");
Aquí "MAP FRAG" es una etiqueta que tienes que dar a tu fragmento.
Compartir si tienes alguna confusión.
- Las notificaciones de envío de GCM no funcionan si la aplicación está cerrada en algunos dispositivos
- El cuadro de diálogo del sistema de pruebas de Calabash muestra e interactúa con él