首页 > 解决方案 > 升级到 targetSdkVersion 30,努力实现范围存储

问题描述

我已经接管了一个用 Java 编写的过时的 Android 应用程序

在将 targetSdkVersion 从 27 更改为 30 之前,我已逐步升级依赖项而没有问题。

这是针对以下功能:

  1. 允许用户从图库中选择或从相机中捕获
  2. 将值保存到应用程序文件夹
  3. 将图片发送到 API

我知道在 Android 10 之前的版本中,我可以添加android:requestLegacyExternalStorage="true"Manifest 文件并且它可以工作,但该功能来自 Android 10+。

如果我降级 targetSdkVersion,它可以工作。

否则会引发以下错误:

E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/xxxxx/1380402_672833029402941_703996746_n.jpg: open failed: EACCES (Permission denied)

由于范围存储限制,我已将其范围缩小到权限问题

我理解它背后的概念,但我无法让它发挥作用。

我需要做什么才能在 Java 代码中解决这个问题,因为我不知道如何在 Kotlin for Java 中应用这些示例?

我尝试了以下一些答案:

示例应用:https ://github.com/tinonetic/android-questions-scoped-storages

  1. 写入权限不起作用 - 范围存储 Android SDK 30(又名 Android 11)
  2. 范围存储 android 10.0
  3. 将图像添加到媒体库 - Android

标签: javaandroidandroid-permissionsscoped-storage

解决方案


推荐阅读