今天交接项目才发现在人家新手机上运行不起来,自己的手机、测试机都没问题,人家的就是不行。当时一个头两个大了,关键时刻掉链子。仔细看看,研究研究,唯一不同的就是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; } } } }