保存图片的方式分为两种:
Android Q 以上
Android Q 以下
补充知识:
Android Q 以上的保存图片
1、保存到应用的内部存储空间 (内部存储)
2、保存到 Android 系统设置的共享存储空间(外部储存)
图片(包括照片和屏幕截图),存储在 DCIM/
或 Pictures/
目录
视频,存储在 DCIM/
、Movies/
或 Pictures/
目录
音频文件,存储在 Alarms/
、Audiobooks/
、Music/
、Notifications/
、Podcasts/
或 Ringtones/
目录中
下载的文件,存储在 Download/
目录中
获取外部存储目录
函数使用:getExternalStorageDirectory()
获取外部存储公共目录
函数使用:getExternalStoragePublicDirectory()
获取外部存储目录
函数使用:getExternalFilesDir()
获取外部存储公共目录
函数使用:
Environment.DIRECTORY_DCIM 相机照片
Environment.DIRECTORY_MUSIC 音乐
Environment.DIRECTORY_PODCASTS 系统广播
Environment.DIRECTORY_RINGTONES 系统铃声
Environment.DIRECTORY_ALARMS 系统提醒铃声
Environment.DIRECTORY_NOTIFICATIONS 系统通知铃声
Environment.DIRECTORY_PICTURES 图片
Environment.DIRECTORY_MOVIES 电影
Environment.DIRECTORY_DOWNLOADS 下载
Android Q 以下
// Android Q 以下
public void saveQNext(Bitmap image, Context context, String fileName, int quality) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "艾跳跳";
Log.i("TAG", "saveQNext: >>> " + path);
// 创建文件夹
mkdir(path);
// 文件名称
Log.i("TAG", "saveQNext: " + fileName);
File file = new File(path, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
// 通过io流的方式来压缩保存图片
image.compress(Bitmap.CompressFormat.JPEG, quality, fos);
fos.flush();
fos.close();
// 保存图片后发送广播通知更新数据库
Uri uri = Uri.fromFile(file);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
} catch (IOException e) {
e.printStackTrace();
}
}
Android Q 以上
// Android Q 以上
@RequiresApi(api = Build.VERSION_CODES.Q)
public void saveQUp(Bitmap image, Context context, String fileName, int quality) {
// 文件夹路径
String imageSaveFilePath = Environment.DIRECTORY_DCIM + File.separator + "艾跳跳";
Log.i("TAG", "文件夹目录 >>> " + imageSaveFilePath);
mkdir(imageSaveFilePath);
// 文件名字
Log.d("TAG", "文件名字 >>> " + fileName);
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.TITLE, fileName);
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
contentValues.put(MediaStore.MediaColumns.DATE_TAKEN, fileName);
//该媒体项在存储设备中的相对路径,该媒体项将在其中保留
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, imageSaveFilePath);
Uri uri = null;
OutputStream outputStream = null;
ContentResolver localContentResolver = context.getContentResolver();
try {
uri = localContentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
outputStream = localContentResolver.openOutputStream(uri);
// Bitmap图片保存
// 1、宽高比例压缩
// 2、压缩参数
image.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
if (uri != null) {
localContentResolver.delete(uri, null, null);
}
} finally {
image.recycle();
try {
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}