1.首先附上一份android 11存盤機制變動簡介官方檔案供參考
https://developer.android.google.cn/preview/privacy/storage#java
2.參考原始碼實作的在android11中保存圖片到圖庫的代碼:
public void saveImageToGallery2(Context context){
Long mImageTime = System.currentTimeMillis();
String imageDate = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date(mImageTime));
String SCREENSHOT_FILE_NAME_TEMPLATE = "Screenshot_%s.png";//圖片名稱,以"Screenshot"+時間戳命名
String mImageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, imageDate);
Resources res=getResources();
Bitmap image =BitmapFactory.decodeResource(res, R.drawable.splash_bg);
final ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES
+ File.separator + "dh"); //Environment.DIRECTORY_SCREENSHOTS:截圖,圖庫中顯示的檔案夾名,"dh"
values.put(MediaStore.MediaColumns.DISPLAY_NAME, mImageFileName);
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
values.put(MediaStore.MediaColumns.DATE_ADDED, mImageTime / 1000);
values.put(MediaStore.MediaColumns.DATE_MODIFIED, mImageTime / 1000);
values.put(MediaStore.MediaColumns.DATE_EXPIRES, (mImageTime + DateUtils.DAY_IN_MILLIS) / 1000);
values.put(MediaStore.MediaColumns.IS_PENDING, 1);
ContentResolver resolver = context.getContentResolver();
final Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
try {
// First, write the actual data for our screenshot
try (OutputStream out = resolver.openOutputStream(uri)) {
if (!image.compress(Bitmap.CompressFormat.PNG, 100, out)) {
throw new IOException("Failed to compress");
}
}
// Everything went well above, publish it!
values.clear();
values.put(MediaStore.MediaColumns.IS_PENDING, 0);
values.putNull(MediaStore.MediaColumns.DATE_EXPIRES);
resolver.update(uri, values, null, null);
}catch (IOException e){
resolver.delete(uri, null);
Log.d("Exception",e.toString());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/210039.html
標籤:java
下一篇:Android進階 筆記1
