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

来源:互联网 发布:winrar mac 编辑:程序博客网 时间:2024/05/17 22:20

转自:http://blog.csdn.net/qfanmingyiq/article/details/52561658
今天在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);                  }              }          }      }