Android 6.0权限管理的那些事~干货来

今天交接项目才发现在人家新手机上运行不起来,自己的手机、测试机都没问题,人家的就是不行。当时一个头两个大了,关键时刻掉链子。仔细看看,研究研究,唯一不同的就是Android的系统不同。原来人家的的好“高级”啊,6.0的啊,之前有听说过6.0有了很大的改变,许多之前的权限都要在进行权限的申请,不用在多说了,又要和Android屏幕适配一样了,又要各种权限、版本的判断了。没办法了,赶项目啊,赶紧扎进去研究吧!

先去官网看看去吧:http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.html,再看看前辈们留下的宝贵经验,赶紧把项目需要的权限进行手动授权,项目是搞定了。

首先进行权限是否已授权的判断:

if (Context.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {

}else{

}

  • ContextCompat.checkSelfPermission方法主要用于检测某个权限是否已经被授予,方法返回值为PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了。
  • 然后就要申请授权了
  • ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, 
  • MY_PERMISSIONS_REQUEST_READ_CONTACTS);
  • 最后就是在处理结果的回调了
  • @Override
  • publicvoidonRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {  
  • switch (requestCode) {  
  • case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {  
  • // If request is cancelled, the result arrays are empty.  
  • if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {  
  • // permission was granted, yay! Do the  
  • // contacts-related task you need to do.  
  • }else {  
  • // permission denied, boo! Disable the  
  • // functionality that depends on this permission.  
  • }  
  • return;  
  • }  
  • }}

一看项目代码,忍不住了大笑,各处都是判断了。赶紧重新整理,分享给大家,免去大家再有和我一样的麻烦大笑 

干货


import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;

/**
 * Created by Administrator on 2016/10/27.
 */
public class PermissionsUtils {
    /**
     * android.permission-group.STORAGE
     */
    public static final int CODE_WRITE_PERMISSION = 10000;
    public static final int CODE_READ_SD_PERMISSION = 10001;
    /**
     * android.permission-group.SMS
     */
    public static final int CODE_READ_CELL_BROADCASTS_PERMISSION = 10002;
    public static final int CODE_RECEIVE_MMS_PERMISSION = 10003;
    public static final int CODE_RECEIVE_WAP_PUSH_PERMISSION = 10004;
    public static final int CODE_READ_SMS_PERMISSION = 10005;
    public static final int CODE_SEND_SMS_PERMISSION = 10006;
    /**
     * android.permission-group.SENSORS
     */
    public static final int CODE_BODY_SENSORS_PERMISSION = 10007;
    /**
     * android.permission-group.PHONE
     */
    public static final int CODE_PROCESS_OUTGOING_CALLS_PERMISSION = 10008;
    public static final int CODE_USE_SIP_PERMISSION = 10009;
    public static final int CODE_ADD_VOICEMAIL_PERMISSION = 10010;
    public static final int CODE_WRITE_CALL_LOG_PERMISSION = 10011;
    public static final int CODE_READ_CALL_LOG_PERMISSION = 10012;
    public static final int CODE_CALL_PHONE_PERMISSION = 10013;
    public static final int CODE_READ_PHONE_STATE_PERMISSION = 10014;
    /**
     * android.permission-group.MICROPHONE
     */
    public static final int CODE_RECORD_AUDIO_PERMISSION = 10015;
    /**
     * android.permission-group.LOCATION
     */
    public static final int CODE_ACCESS_COARSE_LOCATION_PERMISSION = 10016;
    public static final int CODE_ACCESS_FINE_LOCATION_PERMISSION = 10017;
    /**
     * android.permission-group.CONTACTS
     */
    public static final int CODE_GET_ACCOUNTS_PERMISSION = 10018;
    public static final int CODE_WRITE_CONTACTS_PERMISSION = 10019;
    public static final int CODE_READ_CONTACTS_PERMISSION = 10020;
    /**
     * android.permission-group.CAMERA
     */
    public static final int CODE_CAMERA_PERMISSION = 10021;
    /**
     * android.permission-group.CALENDAR
     */
    public static final int CODE_WRITE_CALENDAR_PERMISSION = 10022;
    public static final int CODE_READ_CALENDAR_PERMISSION = 10023;


    /**
     * 获取SD卡写权限
     *
     * @param activity
     */
    public static void getWritePermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
//            int REQUEST_CODE_CONTACT = 101;
//            String[] permissions = {permissions....};
验证是否许可权限
//            for (String str : permissions) {
//                if (context.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
申请权限
//                    context.requestPermissions(permissions, REQUEST_CODE_CONTACT);
//                    return;
//                }
//            }
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        CODE_WRITE_PERMISSION);
                return;
            }
        }
    }

    /**
     * 获取SD卡读权限
     *
     * @param activity
     */
    public static void getReadSDPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                        CODE_READ_SD_PERMISSION);
                return;
            }
        }
    }

    /**
     * TODO
     *
     * @param activity
     */
    public static void getReadCellBraoadcastsPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.BROADCAST_WAP_PUSH);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.BROADCAST_WAP_PUSH},
                        CODE_READ_CELL_BROADCASTS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许一个程序监控将收到MMS彩信,记录或处理
     *
     * @param activity
     */
    public static void getReceiveMMSPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.RECEIVE_MMS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.RECEIVE_MMS},
                        CODE_RECEIVE_MMS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序读取短信内容
     *
     * @param activity
     */
    public static void getReadSMSPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.READ_SMS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_SMS},
                        CODE_READ_SMS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序发送sms信息
     *
     * @param activity
     */
    public static void getSendSMSPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.SEND_SMS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.SEND_SMS},
                        CODE_SEND_SMS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序监控将收到WAP PUSH信息
     *
     * @param activity
     */
    public static void getReceiveWapPushPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.RECEIVE_WAP_PUSH);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.RECEIVE_WAP_PUSH},
                        CODE_RECEIVE_WAP_PUSH_PERMISSION);
                return;
            }
        }
    }

    /**
     * todo
     *
     * @param activity
     */
    public static void getBodySensorsPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.BODY_SENSORS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.BODY_SENSORS},
                        CODE_BODY_SENSORS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序监视、修改有关播出电话
     *
     * @param activity
     */
    public static void getProcessOutgoingCallsPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.PROCESS_OUTGOING_CALLS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.PROCESS_OUTGOING_CALLS},
                        CODE_PROCESS_OUTGOING_CALLS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序使用SIP视频服务
     *
     * @param activity
     */
    public static void getUseSipPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.USE_SIP);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.USE_SIP},
                        CODE_USE_SIP_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序使用语音邮件
     *
     * @param activity
     */
    public static void getAddVoicemallPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.ADD_VOICEMAIL);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ADD_VOICEMAIL},
                        CODE_ADD_VOICEMAIL_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序写入(但是不能读)用户的联系人数据
     *
     * @param activity
     */
    public static void getWriteCallLogPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.WRITE_CALL_LOG);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_CALL_LOG},
                        CODE_WRITE_CALL_LOG_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许程序读入(但是不能写)用户的联系人数据
     *
     * @param activity
     */
    public static void getReadCallLogPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.READ_CALL_LOG);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CALL_LOG},
                        CODE_READ_CALL_LOG_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序拨打电话,从非系统拨号器里初始化一个电话拨号
     *
     * @param activity
     */
    public static void getCallPhonePermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.CALL_PHONE);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE},
                        CODE_CALL_PHONE_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序读取电话状态
     *
     * @param activity
     */
    public static void getReadPhoneStatePermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_PHONE_STATE},
                        CODE_READ_PHONE_STATE_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序录制音频
     *
     * @param activity
     */
    public static void getRecordAudioPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.RECORD_AUDIO);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.RECORD_AUDIO},
                        CODE_RECORD_AUDIO_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序通过WiFi或移动基站获取粗略的位置信息
     *
     * @param activity
     */
    public static void getAccessCoarseLocationPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                        CODE_ACCESS_COARSE_LOCATION_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序通过GPS获取精确的位置信息
     *
     * @param activity
     */
    public static void getAccessFineLocationPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        CODE_ACCESS_FINE_LOCATION_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序访问GMail账户列表
     *
     * @param activity
     */
    public static void getGetAccountsPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.GET_ACCOUNTS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.GET_ACCOUNTS},
                        CODE_GET_ACCOUNTS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序访问GMail账户列表
     *
     * @param activity
     */
    public static void getWriteContactsPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.WRITE_CONTACTS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_CONTACTS},
                        CODE_WRITE_CONTACTS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序读取联系人通讯录信息
     *
     * @param activity
     */
    public static void getReadContactsPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.READ_CONTACTS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS},
                        CODE_READ_CONTACTS_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序使用相机
     *
     * @param activity
     */
    public static void getCameraPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.CAMERA);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA},
                        CODE_CAMERA_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序写入用户日程,但不可读取
     *
     * @param activity
     */
    public static void getWriteCalendarPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.WRITE_CALENDAR);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_CALENDAR},
                        CODE_WRITE_CALENDAR_PERMISSION);
                return;
            }
        }
    }

    /**
     * 允许应用程序读入用户日程,但不可写入
     *
     * @param activity
     */
    public static void getReadCalendarPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            int hasWriteContactsPermission = activity.checkSelfPermission(Manifest.permission.READ_CALENDAR);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CALENDAR},
                        CODE_READ_CALENDAR_PERMISSION);
                return;
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值