相册适配 Android 11 的弯路:一个技术博客创作专家的心路历程
2024-01-04 13:16:48
相册适配 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 开发的最新变化有了更深入的了解。通过分享我的经验,我希望能够帮助其他开发者更加轻松地应对类似的适配问题。