解决Android 6.0申请运行时权限在Fragment不回调onRequestPermissionsResult的问题
程序员文章站
2021-12-25 10:58:26
...
今天在Fragment申请运行时相机权限时一直没有回调、不知道怎么回事、而且每测试一次都要重新安装一下、非常麻烦
Fragment中运行时权限的特殊处理、在Fragment中申请权限、不要使用ActivityCompat.requestPermissions、直接使用Fragment的requestPermissions方法、否则会回调到Activity的 onRequestPermissionsResult
private void runPermission(){ if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 //ActivityCompat.requestPermissions(getActivity(), // new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE); //以下是直接使用Fragment的requestPermissions方法 requestPermissions(new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE); }else { startCamera();//此处改为你的逻辑函数 } }
然后在Fragment中继承onRequestPermissionsResult方法
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == CAMERA_REQUEST_CODE) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted startCamera();//此处改为你的逻辑函数 } else { // Permission Denied Toast.makeText(getActivity(), "访问被拒绝!", Toast.LENGTH_SHORT).show(); } } }
如果在Fragment中嵌套Fragment、在子Fragment中使用requestPermissions方法、onRequestPermissionsResult不会回调回来、建议使用 getParentFragment().requestPermissions方法、这个方法会回调到父Fragment中的onRequestPermissionsResult、加入以下代码可以把回调透传到子Fragment
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); List<Fragment> fragments = getChildFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { if (fragment != null) { fragment.onRequestPermissionsResult(requestCode,permissions,grantResults); } } } }
以上就是onrequestpermissionsresult在Fragment中的使用方法、希望对大家有帮助