如何解决通过在具有目标SDK 29的Android 10上启用旧版外部存储,确切地退出了范围存储的选择
有一个选项可以在定向到SDK 29时选择作用域存储。 通过在清单文件中添加android:requestLegacyExternalStorage =“ true”来启用旧版存储。我的应用程序的现有功能无法在Android 10上运行。
例如
- 无法访问公共目录getExternalStorageDirectory()
- 无法调用mkdir()方法
- 无法通过DownloadManager等下载文件。
我想通过启用旧版外部存储来确切选择退出范围存储。
根据我的理解,我们仍然必须在android 10上使用外部存储的新分类。
用于存储路径的DownloadManager代码段:
DownloadManager.Request request=new DownloadManager.Request(Download_Uri);
request.setDestinationInExternalPublicDir("/mappfolder/subdirectory",filename);
清单应用程序代码:
<application
android:requestLegacyExternalStorage="true"
android:name=".base.module.view.MyApplication"
android:allowBackup="false"
android:icon="@drawable/im_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="false"
android:theme="@style/myThemeNOActionBar"
tools:replace="android:supportsRtl"
>
解决方法
getExternalStorageDirectory()在API 29中已弃用。使用getExternalFilesDir()。
如果使用旧版外部存储,则您的应用需要WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE之类的权限。但是很快将要实施范围存储,因此您应该更改代码以改为使用MediaStore API和/或Storage Access Framework。
,通过启用旧存储,可以使用旧文件系统API在公共目录中创建特定于应用程序的目录,并访问公共存储以读取/写入文件。
但是使用DownloadManger,无法将应用程序特定的目录创建到公共存储中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。