我使用重写的生命周期活动方法创建了测试应用程序来记录它。所以我试图在onRequestPermissionsResult中发布带有runnable的消息(handler.post())来显示对话框片段。结果不清楚。
此次runnable在 onPostResume 之后执行,第二次在 onResume 之前立即执行。要捕获此错误,您应多次请求权限。参见附件和日志:
工作测试:
D / LifecycleActivity:请求许可
D / LifecycleActivity:onPause
D / LifecycleActivity:onSaveInstanceState
D / LifecycleActivity:onRequestPermissionsResult
D / LifecycleActivity:onResume
D / LifecycleActivity:onResumeFragments
D / LifecycleActivity:onPostResume
D / LifecycleActivity:onRequestPermissionsResult(已发布)
D / LifecycleActivity:显示对话框
测试失败:
D / LifecycleActivity:请求许可
D / LifecycleActivity:onPause
D / LifecycleActivity:onSaveInstanceState
D / LifecycleActivity:onRequestPermissionsResult
D / LifecycleActivity:onRequestPermissionsResult(已发布)
D / LifecycleActivity:显示对话框
E / AndroidRuntime:FATAL EXCEPTION:main java.lang.IllegalStateException:onSaveInstanceState之后无法执行此操作
onRequestPermissionResult方法代码:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull
String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions,
grantResults);
Log.d(TAG, "onRequestPermissionsResult");
new Handler(Looper.myLooper()).post(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onRequestPermissionsResult (posted)");
displayDialog();
}
});
}
但我为onActivityForResult回调实现了相同的逻辑,它适用于100%。
我在issuetracker.google.com上问了这个问题:https://issuetracker.google.com/issues/37067655。我的问题是列表中的最后一个,我附加了实施的项目。
为什么onRequestPermissionsResult中的发布消息以不同的方式工作?