Android onRequestPermissionsResult 仅在 Activity 上被调用,在 Fragment 上不被调用
Android onRequestPermissionsResult is getting called only on Activity but not on Fragment
我有一个 Activity,其中包含一个片段。我请求 activity 的联系许可如下:
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS}, REQUEST_CODE_PERMISSION);
从片段中,我请求像这样的相机许可:
requestPermissions(new String[] {Manifest.permission.CAMERA}, REQUEST_CODE_PERMISSION);
我在片段和 activity 上都有 onRequestPermissionsResult
方法。问题是,即使我请求片段的许可,activity 中的 onRequestPermissionsResult
也会被调用。片段中的 onRequestPermissionsResult
不会被调用(但如果我从 activity 中删除 onRequestPermissionsResult
,它会被调用)。有什么方法可以适当地使用 onRequestPermissionsResult
方法吗?
当您覆盖 Activity
中的方法时,请务必调用 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
发送的是他们的,则让您的片段通过执行适当的操作来响应。
我有一个 Activity,其中包含一个片段。我请求 activity 的联系许可如下:
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS}, REQUEST_CODE_PERMISSION);
从片段中,我请求像这样的相机许可:
requestPermissions(new String[] {Manifest.permission.CAMERA}, REQUEST_CODE_PERMISSION);
我在片段和 activity 上都有 onRequestPermissionsResult
方法。问题是,即使我请求片段的许可,activity 中的 onRequestPermissionsResult
也会被调用。片段中的 onRequestPermissionsResult
不会被调用(但如果我从 activity 中删除 onRequestPermissionsResult
,它会被调用)。有什么方法可以适当地使用 onRequestPermissionsResult
方法吗?
当您覆盖 Activity
中的方法时,请务必调用 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
发送的是他们的,则让您的片段通过执行适当的操作来响应。