自从安卓6.0来了之后,权限的动态申请问题就一直让代码不美观,但是因为工作比较忙,一直没有怎么样去对这个权限动态申请的封装。今天心血来潮,准备封装一下,虽然最终还是因为不符合封装预期放弃了,但是还是得到了一些之前没关注的点。
首先需要动态申请的“危险”权限的列表
总结如下:android.permission-group是权限组,下面是权限组中的权限
android.permission-group.CALENDAR android.permission.READ_CALENDAR //允许程序读取用户日历数据 android.permission.WRITE_CALENDAR //允许一个程序写入但不读取用户日历数据 android.permission-group.CAMERA android.permission.CAMERA //允许访问摄像头进行拍照 android.permission-group.CONTACTS android.permission.READ_CONTACTS //允许应用访问联系人通讯录信息 android.permission.WRITE_CONTACTS //写入联系人,但不可读取 android.permission.GET_ACCOUNTS //访问一个帐户列表在Accounts Service中 android.permission-group.LOCATION android.permission.ACCESS_FINE_LOCATION //允许一个程序访问精良位置(如GPS) android.permission.ACCESS_COARSE_LOCATION //通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 android.permission-group.MICROPHONE android.permission.RECORD_AUDIO //录制声音通过手机或耳机的麦克 android.permission-group.PHONE android.permission.READ_PHONE_STATE //访问电话状态 android.permission.CALL_PHONE //允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认 android.permission.READ_CALL_LOG android.permission.WRITE_CALL_LOG com.android.voicemail.permission.ADD_VOICEMAIL android.permission.USE_SIP //允许程序使用SIP视频服务 android.permission.PROCESS_OUTGOING_CALLS //允许程序监视、修改有关播出电话 android.permission-group.SENSORS android.permission.BODY_SENSORS android.permission-group.SMS android.permission.SEND_SMS //发送短信 android.permission.RECEIVE_SMS //允许程序监控一个将收到短信息,记录或处理 android.permission.READ_SMS //允许程序读取短信息 android.permission.RECEIVE_WAP_PUSH //允许程序监控将收到WAP PUSH信息 android.permission.RECEIVE_MMS //允许一个程序监控将收到MMS彩信,记录或处理 android.permission.READ_CELL_BROADCASTS android.permission-group.STORAGE android.permission.READ_EXTERNAL_STORAGE //允许程序读取外部存储 android.permission.WRITE_EXTERNAL_STORAGE //允许程序写入外部存储,如SD卡上写文件有了上面的表之后接下来就是,就是动态申请的代码(这个百度一下非常的多)注意这个是在Activity中申请的
/* 单个的权限申请函数 */ public void Permission_application_sing(Context context, Activity activity, String permission) { if (Build.VERSION.SDK_INT >= 23) { //判断是否是6.0系统 int checkCallPhonePermission = ContextCompat.checkSelfPermission(context, permission); if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{permission}, 123); } else { getPermissiondeal.PermissionAllow_deal(); //权限被允许做的操作 } } else { getPermissiondeal.PermissionAllow_deal(); //6.0以下系统直接操作 } }回调函数
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 123: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { //用户点击了允许权限 Log.e("onRequestPermissionsResult", "PermissionAllow_deal"); getPermissiondeal.PermissionAllow_deal();