一般情况下我们在activity中申请权限,然后在onRequestPermissionsResult中处理回调,但是在fragment中申请权限时,在onRequestPermissionsResult中无法收到回调方法。
下面提供两种解决办法:
第一种:在Activity中的onRequestPermissionsResult方法中进行处理把事件传递到fragment中
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 获取到Activity下的Fragment
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments == null)
{
return;
}
// 查找在Fragment中onRequestPermissionsResult方法并调用
for (Fragment fragment : fragments)
{
if (fragment != null)
{
// 这里就会调用我们Fragment中的onRequestPermissionsResult方法
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
第二种:
不使用activity的
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_EXTERNAL_STORAGE);
使用fragment的
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_EXTERNAL_STORAGE);
参考:
在Fragment中申请运行时权限onRequestPermissionsResult收不到数据
在Fragment申请权限无法回调onRequestPermissionsResult方法