Android6.0手机权限处理工具类
来源:互联网 发布:网络部招新面试问题 编辑:程序博客网 时间:2024/05/17 07:32
对于安卓6.0手机用户即将变多的情况,系统对于他的权限处理需要手动设置,官方说为了安全,好麻烦。
先上工具类代码,再说一下操作步骤。
import android.Manifest;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.pm.PackageManager;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;/** * 权限处理工具 * Created by Administrator on 2016/11/23. */public class PermissonUtil { //读写权限 public static final int READ_EXTERNAL_STORAGE = 11; public static String readPermission = Manifest.permission.READ_EXTERNAL_STORAGE; //打开摄像头权限 public static final int CAMERA = 12; public static String cameraPermission = Manifest.permission.CAMERA; //录取音频权限 public static final int RECORD_AUDIO = 13; public static String record_audioPermission = Manifest.permission.RECORD_AUDIO; //获取通讯录权限 public static final int READ_CONTACTS = 14; public static String read_contactsPermission = Manifest.permission.READ_CONTACTS; //获取发短信权限 public static final int SEND_SMS = 15; public static String send_sms = Manifest.permission.SEND_SMS; /** * 获取相应权限 * @param activity * @param permission * @param requestCode * @return true为已有该权限 */ public static boolean getPermission(Activity activity, String permission, int requestCode) { if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode); //这句话就是弹出框,提示你授权 return false; } return true; } /** * 处理权限返回结果,如果用户设置为不再提示则提示用户去设置里打开 * * @param requestCode * @param permissions * @param grantResults */ public static void dealPermissionResult(Activity activity, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (grantResults[0] != PackageManager.PERMISSION_GRANTED && !ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[0])) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); if (requestCode == READ_EXTERNAL_STORAGE) { builder.setMessage("使用该功能需要存储权限,请在权限设置页面提供该权限!"); } else if (requestCode == CAMERA) { builder.setMessage("使用该功能需要照相机权限,请在权限设置页面提供该权限!"); } else if (requestCode == RECORD_AUDIO) { builder.setMessage("使用该功能需要音频权限,请在权限设置页面提供该权限!"); } else if (requestCode == READ_CONTACTS) { builder.setMessage("使用该功能需要访问通讯录权限,请在权限设置页面提供该权限!"); } else if (requestCode == SEND_SMS) { builder.setMessage("使用该功能需要访问短信权限,请在权限设置页面提供该权限!"); } builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show(); } }}
工具类上来了,直接复制即可,当然如果还需要其他重要权限,就补充上去,我只是写了部分权限。
步骤:1,先拥有这个工具类,AndroidManifest.xml中还有对应的权限。
2,判断在操作某些需要重要权限的地方是否已经授权,如果是需要读写权限,只要开读权限就可以,因为在同一个权限组里面。
if (PermissonUtil.getPermission(ChatActivity.this,PermissonUtil.readPermission,PermissonUtil.READ_EXTERNAL_STORAGE)) { if (PermissonUtil.getPermission(ChatActivity.this, PermissonUtil.readPermission, PermissonUtil.CAMERA)) { 权限可以叠加判断, 这儿是存储权限和摄像头权限。 } }
3,在Activity中要有权限未授权回调。当然如果有BaseActivity就直接放在BaseActivity就行,不用写太多。/** * 申请授权处理结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); PermissonUtil.dealPermissionResult(this,requestCode,permissions,grantResults); }这样就大功告成了,简单吧。不要觉得处理权限有好复杂。
再提供一个要用就必须处理的危险名单:
group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTACTSgroup:android.permission-group.PHONE permission:android.permission.READ_CALL_LOG permission:android.permission.READ_PHONE_STATE permission:android.permission.CALL_PHONE permission:android.permission.WRITE_CALL_LOG permission:android.permission.USE_SIP permission:android.permission.PROCESS_OUTGOING_CALLS permission:com.android.voicemail.permission.ADD_VOICEMAILgroup:android.permission-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDARgroup:android.permission-group.CAMERA permission:android.permission.CAMERAgroup:android.permission-group.SENSORS permission:android.permission.BODY_SENSORSgroup:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION permission:android.permission.ACCESS_COARSE_LOCATIONgroup:android.permission-group.STORAGE permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.WRITE_EXTERNAL_STORAGEgroup:android.permission-group.MICROPHONE permission:android.permission.RECORD_AUDIOgroup:android.permission-group.SMS permission:android.permission.READ_SMS permission:android.permission.RECEIVE_WAP_PUSH permission:android.permission.RECEIVE_MMS permission:android.permission.RECEIVE_SMS permission:android.permission.SEND_SMS permission:android.permission.READ_CELL_BROADCASTS
1 0
- Android6.0手机权限处理工具类
- Android6.0 权限处理
- Android6.0权限处理
- Android6.0 权限处理
- android6.0以上权限申请工具类
- Android6.0权限permission提醒工具类
- android6.0动态权限申请工具类
- android6.0以上权限申请工具类
- android6.0手机权限问题
- 收藏精简Android6.0运行时权限处理,70行代码工具类
- Android6.0权限问题,并撰写常用权限工具类
- Android6.0权限问题,并撰写常用权限工具类
- Android6.0动态权限处理
- Android6.0动态权限处理
- Android6.0权限问题处理
- Android6.0权限的处理
- Android6.0权限处理问题
- Android6.0权限处理封装
- 凯撒密码
- delphi property
- 万能排序法compare 自定义排序规则
- 页面调度算法 FIFO,LRU,OPT,及C++代码
- iOS - 页面之间传值的实现 - block
- Android6.0手机权限处理工具类
- ElementUI案例演示:导航、布局、加载动画
- 如何在Android智能手机上捕获数据包?
- socket编程之addrinfo结构体与getaddrinfo函数
- 占楼
- 初涉python,用户登录功能
- MyBatis入门——动态SQL
- 工作中常常使用的几种加密以及签名的方式:Base64
- iOS UITabelView 头视图跟随移动的设置