实现Android11 sd卡访问

整体流程

为了在Android 11上访问SD卡,我们需要先获取权限,然后通过新的存储访问框架来操作文件。下面是整个过程的步骤表格:

步骤 操作
1 请求权限
2 通过存储访问框架操作文件

具体步骤及代码示例

步骤1:请求权限

在AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

在Activity中请求权限:

if (Environment.isExternalStorageManager()) {
    // 已经获取了权限,可以访问SD卡
} else {
    Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
    startActivityForResult(intent, REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE) {
        if (Environment.isExternalStorageManager()) {
            // 已经获取了权限,可以访问SD卡
        } else {
            // 用户未授予权限
        }
    }
}

步骤2:通过存储访问框架操作文件

在AndroidManifest.xml文件中声明请求Legacy权限:

<application
    android:requestLegacyExternalStorage="true">
</application>

使用新的存储访问框架操作文件:

File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "example.txt");
try {
    FileWriter writer = new FileWriter(file);
    writer.append("Hello World!");
    writer.flush();
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

类图

classDiagram
    class Activity {
        +onCreate()
        +onActivityResult()
    }
    class Environment {
        +isExternalStorageManager()
        +getExternalStorageDirectory()
    }
    class File {
        +File(String, String)
    }
    class FileWriter {
        +FileWriter(File)
        +append(String)
        +flush()
        +close()
    }
    Activity <-- Environment
    Activity <-- File
    Activity <-- FileWriter

引用形式的描述信息

请注意,在Android 11上,由于存储权限的变化,我们需要请求新的权限来访问SD卡。同时,使用新的存储访问框架来操作文件会更加安全和可靠。确保按照上述步骤进行操作,以确保应用在Android 11上正常使用SD卡。如果有任何疑问,可以查阅官方文档或者咨询其他开发者。