RequestPermission () no recrea completamente la pila de actividad

Tengo la actividad A que lanza la actividad B. Esta actividad entonces solicita READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE . En Android 6.0, se abre el cuadro de diálogo de permisos (que inmediatamente destruye la actividad B tan pronto como aparece el cuadro de diálogo). Sin embargo, cualquiera que sea el usuario que elija, el sistema volverá a la actividad A.

Solicitar otros permisos funciona bien en otros lugares, pero supongo que los permisos de almacenamiento externo son algunos de los que, como advierten los documentos, "requieren un reinicio de la aplicación" y "el sistema recreará la pila de actividades".

Mi problema es que la actividad B nunca se recrea, y mucho menos onRequestPermissionsResult se llama. Yo habría pensado que "recrear la pila de actividades" implica lanzar la actividad B de nuevo, e idealmente onRequestPermissionResult se llama en él. ¿Cómo se supone que debo manejar esto?

Que destruye inmediatamente la actividad B tan pronto como aparece el diálogo

Eso suena raro para mí. La actividad B debe ser detenida (y quizás detenida) en ese punto, pero no destruida . ¿Seguro que no estás llamando a finish() o usando alguna propiedad como noHistory ?

Es posible que encuentre algunas pistas sobre por qué su actividad se está destruyendo en la am_finish_activity y / o am_destroy_activity en el registro de eventos. Ejemplo de que salga de Gmail con el botón ATRÁS (observe las razones de app-request y finish-imm ):

 $ adb logcat -bevents I/am_finish_activity( 1155): [0,947820256,3228,com.google.android.gm/.ConversationListActivityGmail,app-request] I/am_pause_activity( 1155): [0,947820256,com.google.android.gm/.ConversationListActivityGmail] I/am_on_paused_called(17619): [0,com.google.android.gm.ConversationListActivityGmail] I/am_home_stack_moved( 1155): [0,1,0,0,prevFinished] I/wm_task_moved( 1155): [3162,1,1] I/am_focused_activity( 1155): [0,com.android.launcher/com.android.launcher2.Launcher] I/am_resume_activity( 1155): [0,285205047,3162,com.android.launcher/com.android.launcher2.Launcher] I/am_on_resume_called(24956): [0,com.android.launcher2.Launcher] I/am_destroy_activity( 1155): [0,947820256,3228,com.google.android.gm/.ConversationListActivityGmail,finish-imm] 

No estoy seguro de cómo detallado esas cuerdas razón conseguir, pero si realmente estás teniendo un tiempo difícil averiguarlo, vale la pena mirar.

  • Si ya tengo ACCESS_FINE_LOCATION, ¿puedo omitir ACCESS_COARSE_LOCATION?
  • Cómo eliminar un permiso agregado debido a Google Fitness API 7.5.0
  • Android Marshmallow - cambio de estado de permisos
  • Grant Uri permiso para otra actividad
  • Cómo deshabilitar las animaciones en el código al ejecutar pruebas de Espresso
  • La aplicación de Android se bloquea en 6.0 mientras busca permisos con ActivityCompat.requestPermissions
  • Última actualización de la habilitación y deshabilitación de los datos móviles mediante programación
  • Ventana de superposición del sistema Android
  • ¿Por qué play-services-location necesita los permisos android.permission.WRITE_EXTERNAL_STORAGE y android.permission.READ_EXTERNAL_STORAGE?
  • Java.lang.SecurityException: bloqueo de permisos de BLUETOOTH. (Sólo dispositivos Samsung)
  • No se puede escribir en el almacenamiento externo a menos que se reinicie la aplicación después de conceder permiso.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.