Android图⽚保存到相册不显⽰的解决⽅案(兼容
Android10及更⾼版本)
⽬录
前⾔
问题
解决问题
前⾔
写了⼀个demo,简单逻辑就是:在⼀个图⽚上添加⼀⾏⽂字或者是⽔印,并且保存到系统相册,也就是我们⼿机上的图库。前⾯编辑图⽚添加⽔印都没有问题,到后⾯保存到系统相册出现了问题:显⽰不出来图⽚。
问题
在 Android 10 之前保存系统相册的三步骤:
保存图⽚到⼿机
把图⽚插⼊到⼿机图库
发⼴播更新
代码如下:
public static void savePhotoAlbum(Context context, Bitmap bmp) {
// ⾸先保存图⽚
File appDir = new ExternalStorageDirectory(), "Boohee");
if (!ists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmppress(CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
/
/ 其次把⽂件插⼊到系统图库
try {
MediaStore.Images.Media.ContentResolver(),
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
}
出现的问题:图⽚不显⽰,也就是说没有更新到系统图库中。
细⼼的⼩伙伴会发现,上段代码有两处地⽅废弃的⽅法:
MediaStore.Images.Media.ContentResolver(),
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
解决问题
下⾯是解决上⾯的问题,并兼容 Android10 版本:
/**
* 添加⽔印并保存到系统相册
*/
private void imgMerge() {
new Thread(() -> {
try {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), st);
File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "newFile.jpg");
if (!ists()) {
}
//添加⽔印⽂字位置。
Bitmap newBitmap = addTextWatermark(bitmap, "测试demo⽰例");
//保存到系统相册
savePhotoAlbum(newBitmap, file);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
/**
* 保存到相册
*
* @param src 源图⽚
* @param file 要保存到的⽂件
*/
private void savePhotoAlbum(Bitmap src, File file) {
if (isEmptyBitmap(src)) {
return;
}
//先保存到⽂件
OutputStream outputStream;
try {
outputStream = new BufferedOutputStream(new FileOutputStream(file));
srcpress(Bitmap.CompressFormat.JPEG, 100, outputStream);
if (!src.isRecycled()) {
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//再更新图库
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, Name());
values.put(MediaStore.MediaColumns.MIME_TYPE, getMimeType(file));
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM);
ContentResolver contentResolver = getContentResolver();
Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
if (uri == null) {
return;
}
try {
outputStream = contentResolver.openOutputStream(uri);
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
MediaScannerConnection.scanFile(
getApplicationContext(),
new String[]{AbsolutePath()},
new String[]{"image/jpeg"},
(path, uri) -> {
// Scan Completed
});getsavefilename
}
}
发送⼴播和插⼊MediaProvider两种⽅式添加图⽚到相册,这两种⽅式已经官⽅废弃了。在 Android 10版本以及更⾼版本使⽤上⾯的⽅法,才能有效解决不显⽰图⽚的问题。
做个记录!
以上就是Android 图⽚保存到系统相册不显⽰的解决⽅案(兼容Android 10及更⾼版本)的详细内容,更多关于Android 图⽚保存到相册不显⽰的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论