android 6.0 以后在 Fragment 中申请运行时权限无法回调 onRequestPermissionsResult

一般情况下我们在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方法

猜你喜欢

转载自blog.csdn.net/zyw0101/article/details/81327352