Android 10保存文件到公共目录的实现方法

简介

在Android 10中,为了增强用户对隐私的保护,应用只能直接访问自己的私有目录。如果需要将文件保存到公共目录,需要使用新的API来操作。本文将详细介绍如何使用Android 10的新API保存文件到公共目录。

整体流程

下面的表格展示了实现Android 10保存文件到公共目录的整体流程:

步骤 操作
1 检查权限
2 创建文件
3 写入文件内容
4 关闭文件流

接下来,我们将逐步说明每个步骤需要做哪些操作,并给出相应的代码示例。

检查权限

在Android 10中,保存文件到公共目录需要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},
            PERMISSION_REQUEST_CODE);
} else {
    // 已经有权限,执行下一步操作
    createFile();
}

在上述代码中,PERMISSION_REQUEST_CODE是一个自定义的请求码,用于在权限回调中识别请求。createFile()是下一步的操作。

创建文件

在Android 10中,我们可以使用MediaStore类来创建文件。具体的代码如下:

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, "filename.txt");
values.put(MediaStore.MediaColumns.MIME_TYPE, "text/plain");
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOCUMENTS);
Uri uri = getContentResolver().insert(MediaStore.Files.getContentUri("external"), values);

上述代码创建了一个名为"filename.txt"的文本文件,并保存到Documents目录下。如果你想保存到其他公共目录,可以修改MediaStore.MediaColumns.RELATIVE_PATH字段。

写入文件内容

在创建文件后,我们可以通过获取文件的输出流来写入文件内容。代码示例如下:

OutputStream outputStream = getContentResolver().openOutputStream(uri);
if (outputStream != null) {
    outputStream.write("Hello, World!".getBytes());
    outputStream.close();
}

上述代码将"Hello, World!"写入到文件中。你可以根据需求修改文件内容。

关闭文件流

在完成文件写入操作后,需要关闭文件流。代码示例如下:

if (outputStream != null) {
    outputStream.close();
}

在上述代码中,我们再次关闭了文件流,以确保文件操作的完整性。

总结

通过上述步骤,我们可以在Android 10中成功保存文件到公共目录。首先,我们检查应用是否有WRITE_EXTERNAL_STORAGE权限,如果没有,则申请权限;然后,我们使用MediaStore类创建文件,并指定保存的目录;接着,我们获取文件的输出流,并写入文件内容;最后,我们关闭文件流,完成文件保存操作。

参考资料:

  • [Android官方文档 - 存储访问框架](
  • [Android官方文档 - 保存文件](