本文已参与「新人创作礼」活动,一起开启掘金创作之路。
我们都知道android11之后无法随意访问手机目录,所以这会举一个简单创建指定类型路径的方法:
//保存文件到指定路径保存到相册
public String saveImageToGallery(Bitmap bitmap, String type) {
Log.d(TAG, "saveImageToGallery: ");
// 首先保存图片
File externalFileRootDir = getExternalFilesDir(null);
do {
externalFileRootDir = Objects.requireNonNull(externalFileRootDir).getParentFile();
} while (Objects.requireNonNull(externalFileRootDir).getAbsolutePath().contains("/Android"));
String saveDir = Objects.requireNonNull(externalFileRootDir).getAbsolutePath();
Log.d(TAG, "saveImageToGallery saveDir: " + saveDir);
String storePath = saveDir + File.separator + "dearxy";
File appDir = new File(storePath);
if (!appDir.exists()) {
appDir.mkdirs();
}
String fileName = "";
if ("jpg".equals(type)) {
fileName = System.currentTimeMillis() + ".jpg";
} else {
fileName = System.currentTimeMillis() + ".png";
}
File file;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
String path = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES).getPath();
file = new File(path, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
//通过io流的方式来压缩保存图片
if ("jpg".equals(type)) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} else {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
}
fos.flush();
fos.close();
// MediaStore.Images.Media.insertImage(getContentResolver(),
// file.getAbsolutePath(), fileName, null);
// // 最后通知图库更新
// sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
// Uri.fromFile(new File(file.getPath()))));
} catch (IOException e) {
e.printStackTrace();
}
Log.d(TAG, "saveImageToGallery: path" + file.getAbsolutePath());
return file.getAbsolutePath();
} else {
file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
//通过io流的方式来压缩保存图片
if ("jpg".equals(type)) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} else {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
}
fos.flush();
fos.close();
// MediaScannerConnection.scanFile(PhotoTranDealActivity.this,
// new String[]{file.toString()},
// new String[]{file.getName()}, null);
} catch (IOException e) {
e.printStackTrace();
}
}
return file.getAbsolutePath();
}
android 11手机图片保存成功