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` 类来读取和写入外部存储设备上的文件。