android 高版本sd卡目录读写权限
发布人:shili8
发布时间:2025-02-27 12:13
阅读次数:0
**Android 高版本 SD 卡目录读写权限**
随着 Android 系统的更新,SD 卡目录读写权限变得越来越复杂。从 Android10 开始,系统对外部存储设备(如 SD 卡)的访问控制更加严格。为了确保应用程序能够正常工作和读取/写入 SD 卡上的文件,我们需要了解这些新规则并进行相应的调整。
**Android10 之后的变化**
在 Android10 之前,应用程序可以通过 `READ_EXTERNAL_STORAGE` 和 `WRITE_EXTERNAL_STORAGE` 权限轻松访问外部存储设备。然而,从 Android10 开始,这些权限被废弃,并且系统对外部存储设备的访问控制更加严格。
**新规则**
从 Android10 开始,应用程序需要通过以下方式来读取和写入 SD 卡上的文件:
1. **获取 `READ_EXTERNAL_STORAGE` 权限**:虽然 `WRITE_EXTERNAL_STORAGE` 权限被废弃,但 `READ_EXTERNAL_STORAGE` 权限仍然有效。然而,这个权限仅允许应用程序读取外部存储设备上的文件,而不允许写入。
2. **使用 `Environment.getExternalStorageDirectory()` 获取外部存储设备的根目录**:通过这个方法,应用程序可以获取外部存储设备的根目录,然后根据需要进行读取和写入操作。
3. **检查外部存储设备是否可用**:在尝试读取或写入外部存储设备之前,应用程序应该检查外部存储设备是否可用。
**示例代码**
以下是示例代码,演示了如何在 Android10 之后的版本中读取和写入 SD 卡上的文件:
javaimport android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
public class ExternalStorageExample {
private static final int REQUEST_EXTERNAL_STORAGE =1;
public void readExternalStorage() {
// 检查外部存储设备是否可用 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 获取外部存储设备的根目录 String externalStorageDirectory = Environment.getExternalStorageDirectory().getPath();
//读取外部存储设备上的文件 File file = new File(externalStorageDirectory, "example.txt");
if (file.exists()) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void writeExternalStorage() {
// 检查外部存储设备是否可用 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 获取外部存储设备的根目录 String externalStorageDirectory = Environment.getExternalStorageDirectory().getPath();
// 写入外部存储设备上的文件 File file = new File(externalStorageDirectory, "example.txt");
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("Hello, World!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void requestExternalStoragePermission() {
// 请求 `READ_EXTERNAL_STORAGE` 权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_EXTERNAL_STORAGE);
}
}
}
}
**注意事项**
* 在 Android10 之后的版本中,应用程序需要通过 `READ_EXTERNAL_STORAGE` 权限来读取外部存储设备上的文件。
* 应用程序需要检查外部存储设备是否可用,然后根据需要进行读取和写入操作。
* 使用 `Environment.getExternalStorageDirectory()` 获取外部存储设备的根目录,并且使用 `File` 类来读取和写入外部存储设备上的文件。
**总结**
在 Android10 之后的版本中,应用程序需要通过 `READ_EXTERNAL_STORAGE` 权限来读取外部存储设备上的文件。同时,应用程序需要检查外部存储设备是否可用,然后根据需要进行读取和写入操作。使用 `Environment.getExternalStorageDirectory()` 获取外部存储设备的根目录,并且使用 `File` 类来读取和写入外部存储设备上的文件。

