问题描述
所有上传到Google Play的新应用都必须以Android 10(API级别29)或更高版本为目标。但是,当应用程序定位到API级别29时,从Environment.getExternalStorageDirectory()
返回的路径不再可供应用程序直接访问。
文档建议使用Context.getExternalFilesDir()
(不适合我的用例,因为其中放置的文件位于应用程序内部,并且在卸载应用程序时被删除)或MediaStore
,已记录{{3 }}。
我陷入了以下片段:
// Find all image files on the primary external storage device.
// On API <= 28,use VOLUME_EXTERNAL instead.
Uri collection = MediaStore.Images.Media.getContentUri(
MediaStore.VOLUME_EXTERNAL_PRIMARY);
当我尝试同时支持API = 29时,我尝试了以下操作:
Uri collection;
if (VERSION.SDK_INT >= VERSION_CODES.Q) {
collection = MediaStore.Images.Media.getContentUri(
MediaStore.VOLUME_EXTERNAL_PRIMARY);
} else {
collection = MediaStore.Images.Media.getContentUri(
MediaStore.VOLUME_EXTERNAL);
}
但是,我仍然收到MediaStore.VOLUME_EXTERNAL
要求API级别29的警告。
另外,按照相同的文档,我尝试设置MediaColumns.RELATIVE_PATH
来为系统提供有关存储新编写文件的提示。该代码段如下:
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.disPLAY_NAME,file.getFilename());
values.put(MediaStore.Images.Media.RELATIVE_PATH,"My_image_app_folder");
Uri uri = resolver.insert(collection,values);
这里是同样的问题,该字段需要API级别29。
总而言之,如何存储文件(图像)并支持21到29的API级别?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)