[英]AndroidStudio getExternalStoragePublicDirectory in API 29
[英]Is using getExternalStoragePublicDirectory() below android 29 safe?
所以基本上我正在嘗試將圖像存儲到手機存儲中。 為此,我編寫了一個實用程序方法。 ( folder
是要創建的目錄的名稱)
public static void saveBitmapToGallery(Context context, Bitmap bitmap, String folder) {
if (Build.VERSION.SDK_INT >= 29) {
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.IS_PENDING, true);
contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
contentValues.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, UUID.randomUUID() + ".jpg");
contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/" + folder);
Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
if (uri != null) {
try {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, context.getContentResolver().openOutputStream(uri));
contentValues.put(MediaStore.Images.Media.IS_PENDING, false);
context.getContentResolver().update(uri, contentValues, null, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
} else {
// Is it safe to use deprecated method or there some alternative exist?
File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + folder);
boolean isDirectoryExisted = directory.exists();
if (!isDirectoryExisted) {
isDirectoryExisted = directory.mkdir();
}
if (isDirectoryExisted) {
File imageFile = new File(directory + "/" + UUID.randomUUID().toString() + ".jpg");
try {
FileOutputStream fileOutputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(Uri.fromFile(imageFile));
context.sendBroadcast(mediaScanIntent);
}
}
}
在上述場景中使用此方法getExternalStoragePublicDirectory()是否安全,因為它已被棄用。 還是存在其他替代方案?
從 API 級別 29 開始,此方法已被棄用。在舊設備上使用它是完全可以的,但要遵守外部存儲的標准規則(例如,您需要WRITE_EXTERNAL_STORAGE
權限,包括在運行時在 Android 6.0 上請求它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.