android 10(Q)開始增加了沙盒機制,不能直接把文件保存到/sdcard目錄下,只能保存到APP專屬目錄下;AndroidManifest.xml在標簽下增加屬性【android:requestLegacyExternalStorage=“true”】可以暫時保存到/sdcard路徑下,但是Android11開始就失效了
我們可以通過Context的getExternalFilesDir(null)方法獲取APP專屬目錄,例如:/storage/emulated/0/Android/data/com.example.myapplication/files如果需要把圖片保存到系統相冊里可以參考下面代碼:
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.image_03)
val values = ContentValues();
values.put(?? ?MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + File.separator + "MyApplication"); //在圖庫里顯示的文件夾名:MyApplication
values.put(MediaStore.MediaColumns.DISPLAY_NAME, "test");
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis() / 1000);
values.put(MediaStore.MediaColumns.DATE_MODIFIED, System.currentTimeMillis() / 1000);
values.put(MediaStore.MediaColumns.IS_PENDING, 1);
val resolver = contentResolver;
val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
val out = resolver.openOutputStream(uri!!)
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out)
values.clear()
values.put(MediaStore.MediaColumns.IS_PENDING, 0)
values.putNull(MediaStore.MediaColumns.DATE_EXPIRES)
resolver.update(uri, values, null, null)
?