最近被权限问题弄的焦头烂额 ,所以 记录一下
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>