实现在 Android 13 上使用 SAF API

简介

在 Android 13 及更高版本中,谷歌引入了 SAF(Storage Access Framework)API,该 API 提供了一种安全的方式让应用程序访问用户的存储设备。本文将指导刚入行的开发者如何实现在 Android 13 上使用 SAF API。

流程概述

为了实现在 Android 13 上使用 SAF API,我们需要按照以下步骤进行操作:

步骤 操作
1 请求访问存储权限
2 打开 SAF 文件选择器
3 处理返回的文件 URI

步骤详解

步骤 1:请求访问存储权限

在 AndroidManifest.xml 文件中,确保已添加以下权限:

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

在你的 Activity 或 Fragment 中,使用以下代码请求存储权限:

private static final int REQUEST_CODE_STORAGE_PERMISSION = 1;

private void requestStoragePermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                REQUEST_CODE_STORAGE_PERMISSION);
    }
}

步骤 2:打开 SAF 文件选择器

在你的 Activity 或 Fragment 中,使用以下代码打开 SAF 文件选择器:

private static final int REQUEST_CODE_FILE_PICKER = 2;

private void openFilePicker() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    startActivityForResult(intent, REQUEST_CODE_FILE_PICKER);
}

步骤 3:处理返回的文件 URI

在你的 Activity 或 Fragment 中,重写 onActivityResult 方法来处理返回的文件 URI:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_FILE_PICKER && resultCode == RESULT_OK && data != null) {
        Uri fileUri = data.getData();
        // 使用返回的文件 URI 进行进一步操作
        // ...
    }
}

类图

以下是使用 SAF API 的类图:

classDiagram
    class MainActivity {
        + void requestStoragePermission()
        + void openFilePicker()
        + void onActivityResult(int, int, Intent)
    }

总结

通过本文,你已经了解如何在 Android 13 上使用 SAF API。首先,我们请求访问存储权限以获取用户授权。然后,我们打开 SAF 文件选择器,让用户选择所需的文件。最后,我们处理返回的文件 URI,以继续进行后续操作。希望本文对你有所帮助,祝你在 Android 开发中取得成功!