每个APP都运行在独自的进程中,如果APP需要访问其进程以外的资源或信息,那么它就需要请求对应的权限。APP需要在Manifest文件中列出要请求的权限,并在运行时请求用户授予权限(在Android 6.0及以上的版本中)。本文将讲解怎样用Android Support Library来检查和请求权限。Android 6.0 (API level 23)及以上的Android Framework也支持类似的功能,但是使用support library 可以适配更早的Android版本。
在Manifest中申明权限
在所有Android版本上,在APP的Manifest文件中用元素来什么APP需要的权限。例如,一个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"/>
<!-- other permissions go here -->
<application ...>
...
</application>
</manifest>
系统根据所申明权限的等级有不同的表现:对于一般权限,系统会在APP安装时就自动授予给APP;对应危险权限,必须要请求用户显式的授予给APP。关于权限等级的信息,请见Android权限概述中的“权限等级”
检查权限
从Android 6.0 (API level 23)开始,用户可以在任何时候取消某个APP的某个权限,即使APP的target小于Android 6.0 (API level 23)。例如:即使一个APP昨天还有使用Camera的权限,但是今天用户手动取消了这个权限,那么下次使用APP时就没有这个权限了。所以,如果APP需要一个危险权限,那么APP每次执行需要这个权限的操作时都应该检查APP是否有这个权限。
使用ContextCompat.checkSelfPermission()方法来检查APP是否有某个权限。如下的例子为如何检查a