我有一个包含片段的活动。我正在通过以下活动请求联系许可: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
是他们的片段,则片段会通过执行适当的操作做出响应。