1 如果只是单纯的保存一个Bitmap到内存并不需要规定文件的路径 名称啥的
val bitmap = CodeUtils.createQRCode(code,600,R.mipmap.ic_launcher)
MediaStore.Images.Media.insertImage(contentResolver,bitmap,"","")
2 保存bitmap到file
private fun saveBitmap(bitmap: Bitmap, bitmapName: String): File? {
val file: File
val fileName: String = if (Build.BRAND == "Xiaomi") {
Environment.getExternalStorageDirectory().path + "/DCIM/Camera/" + bitmapName
} else {
Environment.getExternalStorageDirectory().path + "/DCIM/" + bitmapName
}
Log.d("path", fileName)
file = File(fileName)
if (file.exists()) {
file.delete()
}
val outputStream: FileOutputStream
try {
outputStream = FileOutputStream(file)
if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)) {
outputStream.flush()
outputStream.close()
Log.d("path", file.absolutePath)
return file;
}
} catch (e: IOException) {
e.printStackTrace()
}
return null
}
通知刷新,拷贝图片到Picture,所以磁盘上会有两份图片
val file = saveBitmap(bitmap,"gy.png")
file?.apply {
MediaStore.Images.Media.insertImage(contentResolver,
absolutePath,
"gy.png",
null)
}
3 bitmap 直接保存的另一种写法
val values = ContentValues()
values.put(MediaStore.MediaColumns.DISPLAY_NAME, "gy12132.png")
// values.put(MediaStore.MediaColumns.MIME_TYPE, getMimeType(it))
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
val contentResolver = contentResolver
val uri =
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
?: return
try {
val outputStream = contentResolver.openOutputStream(uri)
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream)
outputStream?.close()
} catch (e: IOException) {
e.printStackTrace()
}
待确认代码
//1 不生效 就用2
MediaScannerConnection.scanFile(
getApplicationContext(),
new String[]{file.getAbsolutePath()},
new String[]{"image/jpeg"},
(path, uri) -> {
// Scan Completed
});
//2
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, System.currentTimeMillis() + "");
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.getAbsolutePath())));
private String getSuffix(File file) {
if (file == null || !file.exists() || file.isDirectory()) {
return null;
}
String fileName = file.getName();
if (fileName.equals("") || fileName.endsWith(".")) {
return null;
}
int index = fileName.lastIndexOf(".");
if (index != -1) {
return fileName.substring(index + 1).toLowerCase(Locale.US);
} else {
return null;
}
}
public String getMimeType(File file){
String suffix = getSuffix(file);
if (suffix == null) {
return "file/*";
}
String type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(suffix);
if (type != null || !type.isEmpty()) {
return type;
}
return "file/*";
}