Android笔记--Android6.0、7.0权限处理
2017-03-23 18:33
344 查看
怎么说呢,请求权限本来很简单的一件事情,通过就算,不通过就提示,还没申请就申请,网上的教程搞得这么复杂,连RxPermision都他么出来了,查了半天还他么用不了,干脆就用土办法了,最后发现,土办法还更简单明了一些……
权限请求需要有onRequestPermissionsResult回调操作,所以大家一眼看上去都觉得好复杂,实际上在BaseActivity上面做处理,提供方法给子Activity处理就可以了。本代码的逻辑是在BaseActivity处理onRequestPermissionsResult回调,然后通过回调的方式,将结果传会Acitivty。
话不多说,上代码:
BaseActivity中的代码:
Activity中的调用代码:
回调接口(新建一个interface)代码:
什么时候要什么时候调用……就这么简单,非要装逼长篇大论,蛋疼……
最后附带一个检测并跳转到系统设置页面(用户手动授权)的调用例子:
权限请求需要有onRequestPermissionsResult回调操作,所以大家一眼看上去都觉得好复杂,实际上在BaseActivity上面做处理,提供方法给子Activity处理就可以了。本代码的逻辑是在BaseActivity处理onRequestPermissionsResult回调,然后通过回调的方式,将结果传会Acitivty。
话不多说,上代码:
BaseActivity中的代码:
private OnBooleanListener onPermissionListener; /** * 权限请求(这个方法也有坑,如果检测的时候权限是拒绝的,那就会回调false,但如果检测的时候权限是询问,然后让用户授权权限的时候选了拒绝,那么下面这个代码返回的依旧是true,所以需要搭配另外一个方法用以实时检测权限是否通过) * @param permission Manifest.permission.CAMERA * @param onBooleanListener 权限请求结果回调,true-通过 false-拒绝 */ public void permissionRequests(Activity activity,String permission, OnBooleanListener onBooleanListener){ onPermissionListener=onBooleanListener; if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.READ_CONTACTS)) { //权限通过 onPermissionListener.onClick(true); } else { //没有权限,申请一下 ActivityCompat.requestPermissions(activity, new String[]{permission}, 1); } }else { //权限已有 if (onPermissionListener != null) { onPermissionListener.onClick(true); } } } /** * 当此 4000 权限是必要的,而用户没有允许,允许弹出自定义的设置窗口 * @param activity * @param onBooleanListener * @param permissions */ public void permissionCheck(Activity activity, OnBooleanListener onBooleanListener, String ...permissions){ onPermissionListener = onBooleanListener; for (String permission:permissions){ if (ContextCompat.checkSelfPermission(activity, permission)!= PackageManager.PERMISSION_GRANTED) { //没有权限,申请一下 onPermissionListener.onClick(false); break; } else { if (permission.equals(permissions[permissions.length-1])){ onPermissionListener.onClick(true); } } } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { //权限通过 if(onPermissionListener!=null){ onPermissionListener.onClick(true); } } else { //权限拒绝 if(onPermissionListener!=null){ onPermissionListener.onClick(false); } } return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
Activity中的调用代码:
permissionRequests(Manifest.permission.CAMERA, new OnBooleanListener() { @Override public void onClick(boolean bln) { if(bln){ ToastUtils.showToast(getContext(),"权限通过"); }else{ ToastUtils.showToast(getContext(),"权限拒绝"); } } });
回调接口(新建一个interface)代码:
package com.imxiaoyu.common.impl; /** * 回调错误或者正确 * Created by 她叫我小渝 on 2016/11/1. */ public interface OnBooleanListener { void onClick(boolean bln); }
什么时候要什么时候调用……就这么简单,非要装逼长篇大论,蛋疼……
最后附带一个检测并跳转到系统设置页面(用户手动授权)的调用例子:
//检测录音权限 permissionCheck(getActivity(), new OnBooleanListener() { @Override public void onClick(boolean bln) { if (!bln) { //当前没有权限 final ToastPopupWindow toastPopupWindow = new ToastPopupWindow(getActivity()); //ToastPopupWindow是我自定义的对话框() toastPopupWindow.setContent("录音功能必须允许录音权限才能使用,请前往设置页面许可录音权限后使用!"); toastPopupWindow.setOnClickLeftListener("取消",new View.OnClickListener() { @Override public void onClick(View v) { //取消 toastPopupWindow.dismiss(); } }); toastPopupWindow.setOnClickRightListener("去设置", new View.OnClickListener() { @Override public void onClick(View v) { //去设置 Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null); intent.setData(uri); startActivity(intent); } }); getView().post(new Runnable() { @Override public void run() { toastPopupWindow.show(); } }); } } }, Manifest.permission.RECORD_AUDIO);
相关文章推荐
- Android笔记--Android6.0、7.0权限处理
- Android拍照及图片裁剪、调用系统相册(兼容6.0以上权限处理及7.0以上文件管理)
- Android6.0的拍照权限处理在Android6.0的手机时data为null的问题。
- Android实现拍照及图片裁剪(6.0以上权限处理及7.0以上文件管理)
- Android 7.0拍照权限处理
- Android笔记 android 7.0 动态申请权限
- 【Android开发技巧】android6.0动态获取权限,运行时权限处理
- Android网络连接处理学习笔记
- Android消息处理学习笔记
- Android网络连接处理学习笔记
- android笔记【三】-----事件处理
- android笔记(事件处理)
- Android网络连接处理学习笔记
- Android开发笔记——权限大全
- android的文件权限检测统一处理方法
- Android网络连接处理学习笔记
- Android网络连接处理学习笔记
- Android游戏框架libgdx笔记(二):图像处理
- android个人学习笔记:Unable to open sync connection!异常处理