安卓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