requestPermission() 没有完全重新创建 activity 堆栈

requestPermission() doesn't fully recreate the activity stack

我有 activity A 启动 activity B。这个 activity 然后请求 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE。在 Android 6.0 上,这会弹出权限对话框(一旦对话框弹出,它会立即销毁 activity B)。但是,无论用户选择什么,系统都会 return 到 activity A.

请求其他权限在其他地方工作正常,但我想外部存储权限是其中一些权限,正如文档警告的那样,"require a restart of the application" 和 "the system will recreate the activity stack".

我的问题是 activity B 从未被重新创建,更不用说 onRequestPermissionsResult 被调用了。我原以为 "recreating the activity stack" 涉及再次启动 activity B,理想情况下 onRequestPermissionResult 被调用。我该如何处理?

which immediately destroys activity B as soon as the dialog pops up

这听起来很奇怪。 Activity B 应该在那个时候暂停(也可能停止),而不是 destroyed。你确定你不是在调用 finish() 或使用一些 属性 比如 noHistory 吗?

您或许可以在事件日志中的 am_finish_activity and/or am_destroy_activity 打印中找到一些关于为什么您的 activity 被销毁的线索。我使用返回按钮离开 Gmail 的示例(注意 app-requestfinish-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]

不确定这些字符串的原因有多详细,但如果您真的很难弄明白,那么值得一看。