我有活动A启动活动B.此活动然后请求READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
。在Android 6.0上,这会打开权限对话框(一旦对话框弹出就会立即销毁活动B)。但是,无论用户选择什么,系统都将返回活动A.
请求其他权限在其他地方工作正常,但我认为外部存储权限是那些,正如文档警告的那样,“需要重新启动应用程序”,“系统将重新创建活动堆栈”。
我的问题是活动B永远不会重新创建,更不用说调用onRequestPermissionsResult
了。我原本以为“重新创建活动堆栈”涉及再次启动活动B,理想情况下onRequestPermissionResult
被调用。我该怎么处理这个?
答案 0 :(得分:9)
一旦对话框弹出就会立即销毁活动B
这对我来说听起来很奇怪。活动B应该暂停(并且可能已停止),但不是销毁。您确定不是在调用finish()
或使用noHistory
等属性吗?
您可以在事件日志中的am_finish_activity
和/或am_destroy_activity
打印中找到有关您的活动被销毁的原因的一些线索。我使用“返回”按钮离开Gmail的示例(请注意app-request
和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]
不确定这些原因字符串有多详细,但如果你真的很难搞清楚它,那么值得一看。