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
原创粉丝点击