zoukankan      html  css  js  c++  java
  • 安卓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

  • 相关阅读:
    C#仿QQ设置界面导航
    C#Winform之等待窗体
    《DevExpress》记录之TreeList
    winform窗体取消最大化双击标题最大化
    微信链接非80端口问题解决方案(伪处理)
    《微信企业号开发日志》之接收普通消息
    《微信企业号开发日志》本地调试程序四
    Jmeter取数据库数据进行参数传递
    洛谷 P1969 积木大赛
    洛谷 P1414 又是毕业季II(未完成)
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/12807599.html
Copyright © 2011-2022 走看看