安卓6.0新特性在Fragment申请运行时权限

安卓6.0新特性在Fragment申请运行时权限

今天在Fragment申请权限时代码如下:

public void getContacts(){
int flag = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS);
if (flag!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_CONTACTS},1);
}
}

回调方法如下:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{

System.out.print(true);
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

发现居然无回调。
解决方法:

Fragment中运行时权限的特殊处理
在Fragment中申请权限,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否则会回调到Activity的 onRequestPermissionsResult
如果在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);
}
}
}
}
————————————————
版权声明:本文为CSDN博主「安儿IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qfanmingyiq/java/article/details/52561658

posted @ 2020-04-30 11:11  GordonDicaprio  阅读(311)  评论(0编辑  收藏