Android 11 引入了分区存储的概念,这是一种新的存储策略,以提高用户数据隐私保护和应用安全性。在 Android 11 中,应用程序的访问权限被限制,只有在应用明确请求后,才能访问用户的存储空间。

为了适应 Android 11 的分区存储,开发人员需要对现有应用进行调整。本文将介绍如何适配应用程序以适应 Android 11 的分区存储,并提供一个示例。

问题描述

在 Android 11 中,应用程序无法直接访问外部存储中的文件,除非应用程序明确请求权限。这就导致了一些应用程序无法正常工作,因为它们依赖于直接访问外部存储中的文件。

解决方案

为了适应 Android 11 的分区存储,开发人员可以通过以下步骤来调整应用程序:

1. 更新清单文件

在清单文件 AndroidManifest.xml 中添加以下代码,以声明应用程序需要访问外部存储的权限:

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

2. 使用 SAF(Storage Access Framework)

使用 Storage Access Framework(SAF)来访问外部存储。SAF 提供了安全的方式来让用户选择文件,以及保存和读取文件。下面是一个简单的示例代码来使用 SAF:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_CODE);

3. 请求权限

在 Android 11 中,应用程序必须请求访问外部存储的权限。如果用户同意,应用程序可以访问外部存储中的文件。以下是一个示例代码来请求权限:

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

序列图

下面是一个序列图,展示了应用程序如何请求外部存储权限并使用 SAF 来访问文件:

sequenceDiagram
    participant User
    participant App
    participant SAF

    User->>App: 打开应用程序
    App->>App: 请求访问外部存储权限
    App->>User: 请求权限弹窗
    User->>App: 同意权限
    App->>SAF: 打开文件选择器
    SAF->>App: 返回用户选择的文件
    App->>App: 读取文件内容

结论

通过更新清单文件、使用 SAF 和请求权限,开发人员可以适配应用程序以适应 Android 11 的分区存储。这样可以提高用户数据隐私保护和应用安全性,同时确保应用程序正常工作。希望本文的内容对您有所帮助!

如果您有任何问题或疑问,请随时与我们联系。感谢阅读!

参考链接:

  • [Android Developers: Scoped storage in Android 11](