实现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卡。如果有任何疑问,可以查阅官方文档或者咨询其他开发者。