如何在Android中保存文件图像并支持API级别从21到29?

问题描述

所有上传到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 (将#修改为@)