Java 在android 29下使用getExternalStoragePublicDirectory()安全吗?
所以我基本上是想把图像储存到手机存储器中。为此,我编写了一个实用方法。 (Java 在android 29下使用getExternalStoragePublicDirectory()安全吗?,java,android,android-gallery,Java,Android,Android Gallery,所以我基本上是想把图像储存到手机存储器中。为此,我编写了一个实用方法。 (文件夹是要创建的目录的名称) 在上述场景中使用此方法是否安全,因为它已被弃用。或者存在其他替代方法?此方法从API级别29开始就被弃用。根据外部存储的标准规则(例如,您需要WRITE\u external\u storage权限,包括在Android 6.0上运行时请求),在较旧的设备上使用它是完全可以的。此方法从API级别29开始就被弃用。根据外部存储的标准规则(例如,您需要WRITE_external_storage权
文件夹
是要创建的目录的名称)
在上述场景中使用此方法是否安全,因为它已被弃用。或者存在其他替代方法?此方法从API级别29开始就被弃用。根据外部存储的标准规则(例如,您需要
WRITE\u external\u storage
权限,包括在Android 6.0上运行时请求),在较旧的设备上使用它是完全可以的。此方法从API级别29开始就被弃用。根据外部存储的标准规则(例如,您需要WRITE_external_storage
权限,包括在Android 6.0上运行时请求),在较旧的设备上使用它完全可以
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);
}
}
}