安卓6.0之后动态申请权限的 解决方案

最近被权限问题弄的焦头烂额 ,所以 记录一下

1.第一次 检查 是否有权限

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
   //没有读取联系人的权限 就请求权限
    FragmentClientFragment.this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},1);
}else{
   //直接操作
    Intent intentTest= new Intent(getActivity(), PhoneListActivity.class);
    startActivity(intentTest);
    if (popupWindow != null && popupWindow.isShowing()) {
        popupWindow.dismiss();
        backgroundAlpha(1f);
    }
}
ContextCompat.checkSelfPermission

为检查权限

2.检查权限之后 如果有该权限 则进行操作 ,如果没有 则进行 权限的申请

这时 要分为 两种情况:

1.在activity中 :

/**
 * 请求权限
 */
protected void requestPermission(int code, String... permissions) {
    ActivityCompat.requestPermissions(this, permissions, code);
    App.showToast("如果拒绝授权,会导致应用无法正常使用");
}

调用方法 如上述 所示;

2.在fragment中 调用方法  如下所示:

//没有读取联系人的权限 就请求权限
 FragmentClientFragment.this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},1);

3.在权限申请之后的回调

/**
 * 请求权限的返回结果
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {//请求码与返回码 相等的情况下 ,此处的1 为自定义的值 建议设置为常量
        if (grantResults!=null&&grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            //获取权限
            Intent intentTest= new Intent(getActivity(), PhoneListActivity.class);
            startActivity(intentTest);
            if (popupWindow != null && popupWindow.isShowing()) {
                popupWindow.dismiss();
                backgroundAlpha(1f);
            }
        } else {
            setPerssionFragment("读取联系人");
        }
    }
}

上述情况 为 一般的危险权限的申请过程 ,其中 还有一些 ,用户在授予权限的时候 ,选择询问 的 情况 未解决 ,提前说明一下

此外 :针对于 拍照 权限的申请 申请步骤 需要加上 如下步骤:

1.配置清单中 添加权限申请

<!-- 拍照的权限 -->
<uses-permission android:name="android.permission.CAMERA" />
2.配置权限中添加 fileprovider
<!-- 此处适配7.0应用 升级 、拍照 -->
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.shenlei.servicemoneynew.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">

    <!-- 元数据 -->
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_provider_paths" />
</provider>
3.在res文件夹下 创建xml 文件夹 并且在xml文件夹下 创建
file_provider_paths
文件,文件名字 与配置文件中 保持一致

文件的内容如下所示:

<paths>
    <external-path
        name="camera_photos"
        path=""/>
</paths>

猜你喜欢

转载自blog.csdn.net/weixin_37166398/article/details/79488280