[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中添加<uses-permission>标签),安装时不需要用户确认;
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_FUEL
group:android.permission-group.CONTACTS
group:android.permission-group.PHONE
group:android.permission-group.CALENDAR
group:android.permission-group.CALL_LOG
group:android.permission-group.CAMERA
group: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_VOICEMAIL
group:android.permission-group.ACTIVITY_RECOGNITION
group:android.permission-group.SENSORS
group:android.permission-group.LOCATION
permission:com.google.android.gms.permission.CAR_SPEED
group:android.permission-group.STORAGE
group:com.sina.weibo.permission-group
permission:com.sina.weibo.permission.USER
group:android.permission-group.MICROPHONE
group:android.permission-group.SMS
ungrouped:
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内,直接返回FAIL
public 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) {
自定义权限
<permission
android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
<activity
android:name="com.example.testandroid.BActivity"
android:exported="true"
android:label="B"
android:permission="corn.permission.CORN\_OWN" />
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。