簡體   English   中英

在 android 29 下使用 getExternalStoragePublicDirectory() 安全嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM