系统权限官网知识点

1、权限概述

如果应用在AndroidManifest.xml中申明了非危险权限,应用会自动授权,如果是危险权限,那么应用会通知用户主动授权该权限。android系统主动通知用户进行授权的方式取决于android系统版本以及应用的target sdk版本。

1.1 、API Level >= 23 && Target SDK >= 23

如果设备是android 6.0(api level 23)或者更高,并且应用target sdk是23或者更高,应用会在运行时申请权限。用户可以在任意时间取消权限,所以在应用每次使用某些危险权限相关的api时需要动态检测是否已经授权。

1.2 、API Level <= 22 OR Target SDK <= 22

如果设备是android 5.1.1(api level 22)或者更低,或者应用target sdk是22或者更低,系统会在安装时询问用户授权。如果有新的权限添加到应用的更新版本,那么在应用更新时会询问用户授权。一旦用户授权,那么用户取消授权的唯一方式就是卸载该应用。android提供的系统列表参见如下网址
权限列表
应用也可以定义和强制使用自定义权限

2、查看系统的权限

adb shell pm list permissions
adb shell pm list permissions -s 以表格的形式列出权限

3、Permission required to install unknown apps

对于target sdk 26及以上,通过接口方法安装apk包时,必须要申请REQUEST_INSTALL_PACKAGES权限,即

<uses-permission
        android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
4、普通权限和危险权限

系统权限最常见的区分等级为危险权限和普通权限。
Dangerous permissions cover areas where the app wants data or resources that involve the user’s private information, or could potentially affect the user’s stored data or the operation of other apps.

5、权限组

所有单个的android危险系统权限都属于某个权限组。当设备为android 6.0(api level 23及以上时)并且应用的target sdk是23时:

  1. 当请求一个在AndroidManifest文件中定义的权限时,如果当前应用没有任何权限与该权限同在一个权限组,那么系统会显示一个弹窗向用户描述应用所申请的权限组。(弹窗不会显示具体的权限,而是描述该权限)。(the system just tells the user what permission groups the app needs, not the individual permissions.)

  2. 当请求一个在AndroidManifest文件中定义的权限时,如果当前应用有相关权限与该权限同在一个权限组, 那么系统会自动分配该权限给引用,而不会弹窗。例如,应用申请了读取联系人的权限,那么再申请写联系人的权限时系统会自动分配该权限。

6、危险权限组

危险权限组

7、自定义权限

为了强制使用自定义权限,首先必须在AndroidManifest.xml文件中用一个或多个元素申明。
例如,应用想控制其某个activity被其他应用启动activity权限申明如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
    <permission android:name="com.example.myapp.permission.DEADLY_ACTIVITY"
        android:label="@string/permlab_deadlyActivity"
        android:description="@string/permdesc_deadlyActivity"
        android:permissionGroup="android.permission-group.COST_MONEY"
        android:protectionLevel="dangerous" />
    ...
</manifest>

其中在整个android系统中不允许权限名称重复,除非应用的签名一致,否则会出现无法安装的现象。
android:protectionLevel是必须的,它决定了系统该如何告知用户该权限。android:permissionGroup是可选的,它决定了系统如何向用户展示该权限,推荐使用已经的权限组。android:label和android:description用于向用户说明该权限的,需提供字符串资源。

一个应用可以自定义permission权限,并要求其他应用通过来申请该权限。
其中需要注意的是, 确保每个权限只被定义了一次。你可以在AndroidManifest.xml中应用高级别权限来限制整个应用或者应用的某个组件的可获得性。
在标签中android:permission属性中申明自定义的权限。

Activity permissions (applied to the tag) restrict who can start the associated activity. The permission is checked during Context.startActivity() and Activity.startActivityForResult(); if the caller does not have the required permission then SecurityException is thrown from the call.
其他组件类似,参见官方文档。

8、参考

Android System Permissions

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值