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);

            }

        }

    }