本文主要是介绍解决ANDROID 6.0申请运行时权限在FRAGMENT不回调ONREQUESTPERMISSIONSRESULT的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天在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 GrantedstartCamera();//此处改为你的逻辑函数} else {// Permission DeniedToast.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); } } }
}
这篇关于解决ANDROID 6.0申请运行时权限在FRAGMENT不回调ONREQUESTPERMISSIONSRESULT的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!