onRequestPermissionsResult

onRequestPermissionsResult

我有一个包含片段的活动。我正在通过以下活动请求联系许可:

ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS}, REQUEST_CODE_PERMISSION);

从片段中,我正在请求相机许可,如下所示:

requestPermissions(new String[] {Manifest.permission.CAMERA}, REQUEST_CODE_PERMISSION);

我在片段和活动上都有onRequestPermissionsResult方法。问题是,即使我请求片段的许可,也会调用活动中的onRequestPermissionsResult。片段中的onRequestPermissionsResult不会被调用(但是如果我从活动中删除onRequestPermissionsResult,它将被调用)。有什么办法可以使用适当的onRequestPermissionsResult方法吗?

最佳答案

当您覆盖super.onRequestPermissionsResult(...)中的方法时,请确保调用Activity

也就是说,解决此问题的另一种方法是手动通知您在活动中拥有的Fragment

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    final List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if (fragments != null) {
        for (Fragment fragment : fragments) {
            fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}


..并且,如果发送的requestCode是他们的片段,则片段会通过执行适当的操作做出响应。

08-17 16:53