Android 6.0 及以后,如果你的应用需要用到一些危险权限,那么这些权限必须手动申请
。
具体危险权限有哪些,可以通过下面这篇文章自行查询到:
使用 adb 命令列出设备所有危险权限
例如,读写文件就涉及到两个危险权限:
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
步骤1:声明权限
首先,你必须在 AndroidManifest.xml
文件中声明要用到的权限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 读写文件 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
对于危险权限来说,声明了并不意味着你就拥有这些权限,你还必须手动申请。
步骤2:查询是否有权限
在读写文件之前,你必须检查
你是否拥有读写文件的权限。
通过 ContextCompat
的 checkSelfPermission
函数就可以检查是否拥有指定权限。
例如:
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
第一个参数是 Context
;
第二个参数是需要检查的权限名称。
该函数返回一个 Int
类型的值,其结果只有两种:PackageManager.PERMISSION_GRANTED
和 PackageManager.PERMISSION_DENIED
- PERMISSION_GRANTED:有此权限
- PERMISSION_DENIED:无此权限
综上所述,我们可以通过判断来处理相应的逻辑:
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
) {
Log.d(TAG, "有权限")
} else {
Log.d(TAG, "无权限")
<