Android 11文件写入到SD卡的实现

在Android系统的最新版本Android 11中,由于系统权限的更新和安全性的考虑,对于应用程序如何写入文件到SD卡进行了一些调整。在本篇文章中,我们将介绍如何在Android 11中实现将文件写入到SD卡的操作,并且附带代码示例。

为什么会有改动?

在Android 11中,Google引入了Scoped Storage的概念,这意味着应用程序只能访问自己的私有存储空间,而无法直接访问外部存储空间,包括SD卡。这样可以增加用户数据的隐私保护和应用程序之间的安全性。

如何实现文件写入到SD卡?

要在Android 11中将文件写入到SD卡,需要请求相应的权限,并使用新的API来操作外部存储空间。以下是一些关键步骤:

1. 请求权限

在AndroidManifest.xml文件中添加请求权限的声明:

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

然后在代码中请求权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}

2. 使用新的API

在Android 11中,我们可以使用StorageVolumeDocumentFile来操作外部存储空间。以下是一个文件写入到SD卡的示例代码:

File file = new File("/storage/emulated/0/MyFile.txt");
try {
    FileWriter writer = new FileWriter(file);
    writer.append("Hello, SD card!");
    writer.flush();
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

3. 处理Scoped Storage

在Android 11中,我们还需要处理Scoped Storage的限制。我们可以使用MediaStore来访问外部存储空间中的文件,如下所示:

ContentValues values = new ContentValues();
values.put(MediaStore.Downloads.DISPLAY_NAME, "MyFile.txt");
values.put(MediaStore.Downloads.MIME_TYPE, "text/plain");
values.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);

Uri uri = getContentResolver().insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
try {
    OutputStream outputStream = getContentResolver().openOutputStream(uri);
    outputStream.write("Hello, SD card!".getBytes());
    outputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

总结

在Android 11中,由于Scoped Storage的改动,写入文件到SD卡需要遵循新的规则和使用新的API。通过请求权限、使用新的API和处理Scoped Storage,我们可以实现在Android 11中将文件写入到SD卡的操作。希望本文对您有所帮助!


pie
    title 文件存储权限
    "允许" : 75
    "拒绝" : 25
sequenceDiagram
    participant App
    participant Manifest
    participant User

    App->Manifest: 请求权限声明
    Manifest-->App: 权限声明通过
    App->User: 请求权限
    User-->App: 授权

通过本文的介绍和示例代码,相信读者已经了解了如何在Android 11中将文件写入到SD卡的操作方法。请遵循新的规则和使用新的API,来实现文件的存储操作。祝您编程愉快!