图像保存在 Scoped Storage Android 10 中,未出现在图库中

问题描述

必需行为:我使用以下代码来保存图像,并希望将它们显示在图库中(因为我们可以从 whatsapp 中看到图像)。

boolean downloadImage(Bitmap image) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this,"Download started..",Toast.LENGTH_SHORT).show();
            }
        });
        ContentResolver resolver = getApplicationContext().getContentResolver();
        Uri imageCollection;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            imageCollection = MediaStore.Images.Media
                    .getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
        } else {
            imageCollection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        }
        String imgName = "IMG_"+System.currentTimeMillis()+".jpg";
        ContentValues imgDetails = new ContentValues();
        imgDetails.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
        imgDetails.put(MediaStore.Images.Media.DISPLAY_NAME,imgName);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            imgDetails.put(MediaStore.Images.Media.IS_PENDING,1);
            imgDetails.put(MediaStore.Images.Media.RELATIVE_PATH,"DCIM/DownloaderApp");
        }
        Uri imgUri = resolver.insert(imageCollection,imgDetails);
        try {
            OutputStream outputStream = resolver.openOutputStream(imgUri);
            boolean saveResult = image.compress(Bitmap.CompressFormat.JPEG,90,outputStream);
            outputStream.close();
            imgDetails.clear();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                imgDetails.put(MediaStore.Images.Media.IS_PENDING,0);
            }
            resolver.update(imageCollection,imgDetails,null,null);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(
                            MainActivity.this,(saveResult) ?"Image Path: "+imgUri.getPath() :"Failed to save image!",Toast.LENGTH_SHORT).show();
                }
            });
            outputStream.close();
            return saveResult;
        } catch(Exception e) {
            e.printStackTrace();
            return false;
        }
    }

当前情况:我可以看到图像保存在文件管理器中的确切位置 DCIM/DownloaderApp,但这些图片没有出现在图库中,即它们不会通过 {{1 }} API(我的感觉)。
目标 Android: Android 10

我知道,我可以在清单中使用 MediaStore。但我希望该应用程序也与 android 11 完美兼容。所以不想这样做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...