Android 7 外部存储权限实现教程
1. 整体流程
在 Android 7(API level 24)及以上的版本中,访问外部存储(如 SD 卡)需要获取运行时权限。下面是实现 Android 7 外部存储权限的整体流程:
步骤 | 描述 |
---|---|
步骤1 | 在 AndroidManifest.xml 文件中添加相应的权限声明 |
步骤2 | 在 Java 代码中检查是否已获得外部存储权限 |
步骤3 | 如果未获得权限,请求用户授权 |
步骤4 | 处理权限授权结果 |
步骤5 | 在代码中访问外部存储 |
下面将详细介绍每一步的具体操作。
2. 步骤1:权限声明
在 AndroidManifest.xml 文件中添加以下权限声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
这样就声明了读写外部存储的权限。系统会在应用安装时提示用户授予这些权限。
3. 步骤2:检查权限状态
在需要访问外部存储的代码中,先检查是否已获得相应权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
// 已获得权限,可以访问外部存储
} else {
// 未获得权限,需要请求用户授权
}
上述代码中,this
表示当前的上下文对象。ContextCompat.checkSelfPermission()
方法用于检查应用是否具有指定的权限,返回值为 PackageManager.PERMISSION_GRANTED
表示已获得权限,否则需要请求用户授权。
4. 步骤3:请求用户授权
如果未获得外部存储权限,需要请求用户授权。可以使用 ActivityCompat.requestPermissions()
方法请求授权:
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE);
上述代码中,this
表示当前的上下文对象,Manifest.permission.WRITE_EXTERNAL_STORAGE
表示请求的权限,REQUEST_CODE
是一个整数值,用于标识此次请求。
5. 步骤4:处理权限授权结果
在对话框中向用户请求权限后,系统会调用 onRequestPermissionsResult()
方法返回授权结果。可以在该方法中处理授权结果:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了权限,可以访问外部存储
} else {
// 用户拒绝了权限,无法访问外部存储
}
}
}
上述代码中,requestCode
是之前请求权限时传递的值,grantResults[0]
表示授权结果,PackageManager.PERMISSION_GRANTED
表示用户授予了权限。
6. 步骤5:访问外部存储
如果用户授予了权限,就可以在代码中访问外部存储了。例如,可以使用 Environment.getExternalStorageDirectory()
方法获取外部存储的路径:
File storageDir = Environment.getExternalStorageDirectory();
上述代码中,storageDir
表示外部存储的路径。
结尾
通过以上步骤,你可以成功实现 Android 7 及以上版本的外部存储权限控制。首先,在 AndroidManifest.xml 文件中添加权限声明;然后,在代码中检查是否已获得权限,如果未获得则请求用户授权;最后,处理授权结果并在代码中访问外部存储。希望本文对你有所帮助!