public static boolean fileSaveToPublic(Context mContext, Bitmap bitmap) {
String imgPath = MyConfig.getYxkDir("photo") + "photo_"
+ new Date().getTime() + ".jpg";
//Android 10及以上版本
//设置路径 Pictures/
String folder = Environment.DIRECTORY_PICTURES;
//设置保存参数到ContentValues中
ContentValues values = new ContentValues();
//设置图片名称
values.put(MediaStore.Images.Media.DISPLAY_NAME, imgPath);
//设置图片格式
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
//设置图片路径
values.put(MediaStore.Images.Media.RELATIVE_PATH, folder);
//执行insert操作,向系统文件夹中添加文件
//EXTERNAL_CONTENT_URI代表外部存储器,该值不变
Uri uri = mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
OutputStream os = null;
try {
if (uri != null) {
//若生成了uri,则表示该文件添加成功
//使用流将内容写入该uri中即可
os = mContext.getContentResolver().openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
MyLog.debug(uri.toString());
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
mContext.sendBroadcast(intent);
showToast("图片保存成功 ");
return true;
}
低于安卓10,是直接通过file文件进行创建,并且通过广播通知系统相册进行刷新的。而在安卓10以上(包含)则是通过MediaStore和contentResolver方法,进行插入到系统,原理其实是创建一个uri后写入文件,不过这个过程系统已经帮我们处理好,开发者只需要调用相关api即可。