Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onRequestPermissionsResult:在onSaveInstanceState之后无法执行此操作_Android_Android Fragments_Android Permissions - Fatal编程技术网

Android onRequestPermissionsResult:在onSaveInstanceState之后无法执行此操作

Android onRequestPermissionsResult:在onSaveInstanceState之后无法执行此操作,android,android-fragments,android-permissions,Android,Android Fragments,Android Permissions,我用重写的生命周期活动方法创建了测试应用程序来记录它。所以我尝试在onRequestPermissionsResult中使用runnable发布消息(handler.post()),以显示对话框片段。结果尚不清楚 一次此runnable在恢复后执行,第二次在恢复后执行。要捕获此错误,您应该多次请求权限。请参阅随附的应用程序和日志: 工作测试: D/LifecycleActivity:请求权限 D/生命周期活动:暂停 D/生命周期活动:onSaveInstanceState D/生命周期活动:on

我用重写的生命周期活动方法创建了测试应用程序来记录它。所以我尝试在onRequestPermissionsResult中使用runnable发布消息(handler.post()),以显示对话框片段。结果尚不清楚

一次此runnable在恢复后执行,第二次在恢复后执行。要捕获此错误,您应该多次请求权限。请参阅随附的应用程序和日志:

工作测试
D/LifecycleActivity:请求权限
D/生命周期活动:暂停
D/生命周期活动:onSaveInstanceState
D/生命周期活动:onRequestPermissionsResult
D/生命周期活动:恢复时
D/生命周期活动:onResumeFragments
D/生命周期活动:在恢复后进行
D/生命周期活动:onRequestPermissionsResult(已发布)
D/LifecycleActivity:显示对话框

测试失败
D/LifecycleActivity:请求权限
D/生命周期活动:暂停
D/生命周期活动:onSaveInstanceState
D/生命周期活动:onRequestPermissionsResult
D/生命周期活动:onRequestPermissionsResult(已发布)
D/生命周期活动:显示对话框
E/AndroidRuntime:致命异常: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上问了这个问题:。我的问题是列表中的最后一个问题,我将已实施的项目附在后面


为什么onRequestPermissionsResult中的发布消息的工作方式不同?

没有代码,也没有API级别的详细信息,没有具体问题。请给出一个再现报告问题的最小示例,并说明确切的问题是什么。没有关于API级别的代码和细节,没有具体问题。请给出一个再现报告问题的最小示例,并说明确切的问题是什么。