requestPermission()不会完全重新创建活动堆栈

时间:2015-10-26 06:52:12

标签: android android-permissions android-6.0-marshmallow

我有活动A启动活动B.此活动然后请求READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE。在Android 6.0上,这会打开权限对话框(一旦对话框弹出就会立即销毁活动B)。但是,无论用户选择什么,系统都将返回活动A.

请求其他权限在其他地方工作正常,但我认为外部存储权限是那些,正如文档警告的那样,“需要重新启动应用程序”,“系统将重新创建活动堆栈”。

我的问题是活动B永远不会重新创建,更不用说调用onRequestPermissionsResult了。我原本以为“重新创建活动堆栈”涉及再次启动活动B,理想情况下onRequestPermissionResult被调用。我该怎么处理这个?

1 个答案:

答案 0 :(得分:9)

  

一旦对话框弹出就会立即销毁活动B

这对我来说听起来很奇怪。活动B应该暂停(并且可能已停止),但不是销毁。您确定不是在调用finish()或使用noHistory等属性吗?

您可以在事件日志中的am_finish_activity和/或am_destroy_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]

不确定这些原因字符串有多详细,但如果你真的很难搞清楚它,那么值得一看。