【Android】Permission

AlgoAegis
• 阅读 4159

[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" />
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
android获取mac地址
1、<usespermissionandroid:name"android.permission.ACCESS_WIFI_STATE"/ 2、privateStringgetLocalMacAddress(){WifiManagerwifi(WifiManager)getSystemSe
东方客主 东方客主
4年前
Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条
问题1、页面布局文件:<LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"android:id"@id/layoutorderdetail"android:layoutwidth"matchparent"android:layoutheigh
Stella981 Stella981
4年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
4年前
Android 设置系统闹铃和日历
一、创建定时器 设置权限<usespermissionandroid:name"com.android.alarm.permission.SET_ALARM"/案例https://developer.android.com/reference/android/provider/Alar
Wesley13 Wesley13
4年前
Java Swing 创建转圈的进度提示框
JavaSwing创建转圈的进度提示框摘自https://blog.csdn.net/nihaoqiulinhe/article/details/52439486置顶2016年09月05日13:40:07阅读数:4104   总是觉得JavaSwing没有Android的好,不能自定
Easter79 Easter79
4年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Wesley13 Wesley13
4年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Stella981 Stella981
4年前
Android加载网络图片
AndroidManifest.xml文件中加入以下权限设置:    <usespermissionandroid:name"android.permission.INTERNET"/    <usespermissionandroid:name"android.permission.WRITE\_EXTERNAL\_STORAGE
Stella981 Stella981
4年前
Android选项卡TabHost功能和用法
1、布局文件<TabHostxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:id"@android:id/tabhost"
AlgoAegis
AlgoAegis
Lv1
要是你不嫌弃我的渣字我愿意为你写下你喜欢的句子。
文章
3
粉丝
0
获赞
0