问题描述
必需行为:我使用以下代码来保存图像,并希望将它们显示在图库中(因为我们可以从 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 (将#修改为@)