前言
权限是Android中一个非常重要的组成部分,许多操作都需要获取到权限才能进行。在Android6.0
之后,权限机制发生了重大变化,加入了运行时权限这一概念。本文就详细讲解一下Android6.0
前后的权限机制。
Android6.0之前的权限机制
在Android6.0
之前,权限机制是很简单的,应用只需要在AndroidManifest
文件中将自己需要的权限声明即可。示例代码如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissiondemo">
<!-- 请求网络权限 -->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
......
</application>
</manifest>
用户只要安装了应用,就代表授予应用其声明的所有权限。如果用户不认可应用声明的权限,就只能选择不安装该应用了。显然,在这种机制中用户处于弱势的地位。
Android6.0之后的权限机制
为了让用户拥有自主授予应用权限的权利,Android6.0
加入了运行时权限这一概念。对于危险权限,应用必须在使用的时候进行申请,用户可以自主选择是否授予这些权限。如果拒绝授予权限,应用也不会崩溃,只是用户无法使用这一部分功能罢了。这样一来,用户的选择权就被大大加强了。
权限类别
Android大致将权限分为两类,即普通权限
和危险权限
。对于普通权限,依旧使用Android6.0
之前的权限机制,只需要在AndroidManifest
中声明即可。而对于危险权限,则必须在应用运行时主动申请,由用户决定是否授予。危险权限列表如下:
- CALENDAR
READ_CALENDAR
WRITE_CALENDAR
- CAMERA
CAMERA
- CONTACTS
READ_CONTACTS
WRITE_CONTACTS
GET_CONTACTS
- LOCATION
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCAT