【Android】Permission
[https://developer.android.com...]
https://shoewann0402.github.io/2019/03/17/android-q-beta-scoped-storage/(https://developer.android.com...
permission-group
给相关的权限声明一个逻辑上的分组名称。独立的权限要通过元素的permissionGroup属性来加入权限分组。同一分组的中成员会一起展现在用户的界面中。
同一组的任何一个权限被授权了,其他权限也自动被授权。例如,一旦WRITE__CONTACTS__被授权了,__app__也有__READ__CONTACTS和GET_ACCOUNTS了。
normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加
dangerous:高风险权限,安装时需要用户的确认才可使用;
signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)
Dangerous Permissions:
group:com.google.android.gms.permission.CAR_INFORMATION permission:com.google.android.gms.permission.CAR_VENDOR_EXTENSION permission:com.google.android.gms.permission.CAR_MILEAGE permission:com.google.android.gms.permission.CAR_FUELgroup:android.permission-group.CONTACTSgroup:android.permission-group.PHONEgroup:android.permission-group.CALENDARgroup:android.permission-group.CALL_LOGgroup:android.permission-group.CAMERAgroup:android.permission-group.UNDEFINED permission:android.permission.READ_SMS permission:android.permission.READ_CALENDAR permission:android.permission.READ_CALL_LOG permission:android.permission.ACCESS_FINE_LOCATION permission:android.permission.ANSWER_PHONE_CALLS permission:android.permission.RECEIVE_WAP_PUSH permission:android.permission.BODY_SENSORS permission:android.permission.READ_PHONE_NUMBERS permission:android.permission.RECEIVE_MMS permission:android.permission.RECEIVE_SMS permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.ACCESS_COARSE_LOCATION permission:android.permission.READ_PHONE_STATE permission:android.permission.SEND_SMS permission:android.permission.CALL_PHONE permission:android.permission.WRITE_CONTACTS permission:android.permission.ACCEPT_HANDOVER permission:android.permission.CAMERA permission:android.permission.WRITE_CALENDAR permission:android.permission.WRITE_CALL_LOG permission:android.permission.USE_SIP permission:android.permission.PROCESS_OUTGOING_CALLS permission:android.permission.READ_CELL_BROADCASTS permission:android.permission.GET_ACCOUNTS permission:android.permission.WRITE_EXTERNAL_STORAGE permission:android.permission.ACTIVITY_RECOGNITION permission:android.permission.RECORD_AUDIO permission:android.permission.READ_CONTACTS permission:android.permission.ACCESS_BACKGROUND_LOCATION permission:android.permission.ACCESS_MEDIA_LOCATION permission:com.android.voicemail.permission.ADD_VOICEMAILgroup:android.permission-group.ACTIVITY_RECOGNITIONgroup:android.permission-group.SENSORSgroup:android.permission-group.LOCATION permission:com.google.android.gms.permission.CAR_SPEEDgroup:android.permission-group.STORAGEgroup:com.sina.weibo.permission-group permission:com.sina.weibo.permission.USERgroup:android.permission-group.MICROPHONEgroup:android.permission-group.SMSungrouped: permission:com.huawei.hms.permission.ACTIVITY_RECOGNITION permission:com.google.android.providers.talk.permission.WRITE_ONLY permission:org.codeaurora.permission.POWER_OFF_ALARM permission:com.qualcomm.permission.USE_EMBMS_SERVICE permission:com.google.android.providers.talk.permission.READ_ONLY
动态权限适配
Normal Permission:写在xml文件里,那么App安装时就会默认获得这些权限,即使是在Android6.0系统的手机上,用户也无法在安装后动态取消这些normal权限,这和以前的权限系统是一样的,不变。
Dangerous Permission:还是得写在xml文件里,但是App安装时具体如果执行授权分以下几种情况:
1、targetSDKVersion < 23 & API(手机系统) < 6.0 :安装时默认获得权限,且用户无法在安装App之后取消权限。
3、targetSDKVersion < 23 & API(手机系统) >= 6.0 :安装时默认获得权限,但是用户可以在安装App完成后动态取消授权( 取消时手机会弹出提醒,告诉用户这个是为旧版手机打造的应用,让用户谨慎操作 )。
2、targetSDKVersion >= 23 & API(手机系统) < 6.0 :安装时默认获得权限,且用户无法在安装App之后取消权限。
4、targetSDKVersion >= 23 & API(手机系统) >= 6.0 :安装时不会获得权限,可以在运行时向用户申请权限。用户授权以后仍然可以在设置界面中取消授权,用户主动在设置界面取消后,在app运行过程中可能会出现crash
申请权限一般通过代理的Activity申请
代理Activity
requestPermissions申请
onRequestPermissionResult 接收结果并回调
// 基础判断权限方法public abstract int checkPermission(@NonNull String permission, int pid, int uid);// 当前进程内判断权限的方法,如果在IPC内,直接返回FAILpublic abstract int checkCallingPermission(@NonNull String permission);// IPC内判断权限的方法public abstract int checkSelfPermission(@NonNull String permission);// 上面两种方法的结合,只想判断当前进程内权限,不要使用这个方法,会有安全性问题public abstract int checkCallingOrSelfPermission(@NonNull String permission);// 判断是否可以弹窗public boolean shouldShowRequestPermissionRationale(@NonNull String permission) {
自定义权限
更多相关文章
- android 跳转到系统相关应用的方法
- Android调用系统相机拍摄视频以及获取缩略图
- Android Donut 系统烧写到开发板,脱离NFS启动
- 文件系统中的保留空间
- Android中调用系统函数查找联系人
- android 改变系统默认动态壁纸
- 【Android】遍历系统中所有应用程序