返回

相册适配 Android 11 的弯路:一个技术博客创作专家的心路历程

Android

相册适配 Android 11 的坎坷历程

作为一名经验丰富的技术博客创作专家,我经常遇到各种挑战,而最近一个就是为 Android 11 适配相册应用。为了帮助大家避免类似的坎坷,我将分享我在这段旅程中的经验和教训。

序幕:Android 11 的变化

Android 11 为应用带来了重大变化,尤其是与存储和权限相关的变化。为了增强用户隐私和安全性,Android 11 引入了新的 scoped storage 机制,并限制了应用访问外部存储的能力。

挑战 1:缺失的缩略图

在我的相册 Demo 中,将 targetSdk 设置为 30 后,我在 Android 10 测试机上运行该应用,却发现缩略图无法正常显示。经过一番调查,我发现 Android 11 引入了一个新的 READ_EXTERNAL_STORAGE 权限,而我忘记了在清单文件中添加该权限。

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

挑战 2:文件 URI 不再可访问

添加 READ_EXTERNAL_STORAGE 权限后,我发现从相册中获取的文件 URI 无法再直接在应用中访问。这是因为 Android 11 限制了应用对外部存储的访问,并要求使用 FileProvider 授予对特定文件的访问权限。

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.myapp.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

挑战 3:MediaStore URI 不再受支持

在 Android 11 中,对 MediaStore URI 的访问也受到了限制。不再允许应用直接从 MediaStore 中获取文件。相反,必须使用 MediaStore API 来查询和获取文件。

MediaStore.Images.Media.EXTERNAL_CONTENT_URI

解决之道:循序渐进

通过逐一解决这些挑战,我最终成功地为 Android 11 适配了相册应用。以下是我总结的一些关键步骤:

  • 添加 READ_EXTERNAL_STORAGE 权限
  • 使用 FileProvider 授予文件访问权限
  • 使用 MediaStore API 查询和获取文件
  • 验证权限并处理错误情况

经验教训:未雨绸缪

从这段经历中,我学到了宝贵的经验教训。在进行 Android 版本更新时,提前了解即将到来的变化至关重要。通过及时查看官方文档和参加技术会议,可以避免许多不必要的麻烦。

结语

相册适配 Android 11 之旅虽然充满挑战,但也让我对 Android 开发的最新变化有了更深入的了解。通过分享我的经验,我希望能够帮助其他开发者更加轻松地应对类似的适配问题。