Android的权限机制是用于保护用户的隐式信息。APP访问敏感用户数据(如联系人和SMS)或某些系统功能(如Camera和Internet)时,必须请求用户授予对应的权限。根据被访问的特性,系统会自动授予权限或请求用户授予权限。本文将对Android权限是怎样工作的进行概述,包括:权限请求提示框是怎样展示给用户的、“安装时请求权限”与“运行时请求权限”的区别、权限是如何执行的、权限的类型及分组。
权限授予
APP需要在Manifest文件中用<uses-permission>
显示申请所需的权限。例如,APP需要发送SMS,那么需要在manifest中做如下申请:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.snazzyapp">
**<uses-permission android:name="android.permission.SEND_SMS"/>**
<application ...>
...
</application>
</manifest>
对于APP在Manifest中申请的普通权限(不会给用户隐私和设备操作带来风险的权限),系统会自动授予权限给APP;对于APP在Manifest中申请的危险权限(会给用户隐私和设备操作带来风险的权限),如SEND_SMS权限,用户必须显式授予权限给APP。关于普通权限和危险权限的详细信息,请见“安全等级”。
请求授予危险权限
只有危险权限才需要用户的授予。Android系统请求用户授予危险权限的方法与用户设备上运行的Android版本和APP的Target Version有关。
运行时请求权限(Android 6.0及以上)
如果Android系统版本为Android 6.0(API 23)及以上,APP的targetSdkVersion是23及以上,那么在安装APP时不提示用户授予权限,而在APP运行时提示用户授予危险权限。系统会向用户展示一个提示框(如图1左边所示),提示用户APP当前正在请求哪个权限。对话框包括一个Deny按钮和一个Allow按钮。
如果用户不允许授予此权限,那么APP下次请求这个权限时,弹出的提示框上会多一个单选框。如果用户勾选提示框中的“Never ask again”,那么APP下次再请求同一个权限时,系统不会再提示用户授予权限。(如图1右边所示)。