java - 如何在 Android Q (API 29) 上将文件保存到公共(public)(外部)存储?

标签 java android file-storage

我一直在使用外部存储来保存不同类型的文件。该文件需要对用户可见。现在,从 Android Q 开始,getExternalStoragePublicDirectory() 方法已被弃用 getExternalStoragePublicDirectory(docs) .

我使用了以下代码:

File externalFilesDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "DirectoryName");

是否有另一种方法来保存用户可见的文件?

最佳答案

您需要添加对 Android Q 的检查。假设您要将图像保存在公共(public)下载文件夹中。

try{
     OutputStream fos;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
       ContentResolver resolver = context.getContentResolver();
       ContentValues contentValues = new ContentValues();
       contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
       contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");
       contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
       Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
       fos = resolver.openOutputStream(Objects.requireNonNull(imageUri));
    } else {
       String imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
       File image = new File(imagesDir, fileName);
       fos = new FileOutputStream(image);
    }
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
     Objects.requireNonNull(fos).close();
}catch (IOException e) {
  // Log Message
}

关于java - 如何在 Android Q (API 29) 上将文件保存到公共(public)(外部)存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475704/

相关文章:

Java类构造函数

java - 如何访问 Selenium 中 <td> 中动态生成的文本?

android - 随处滑动以打开抽屉导航

android - 错误 :Execution failed for task ':app:transformClassesWithJarMergingForRelease'

JavaScript:写入下载流

java - 当 API 通过 JSON 返回 null 值时,使用 Moshi 时有什么方法可以返回 Kotlin 数据类中的默认值

java - SpriteBatch 设置在 libgdx 中 Actor 级别以下

android - 安装后仅启动一次 Activity

python - 如何在django中使用upload_to指定目录和函数

android - Intent.ACTION_GET_CONTENT 与谷歌驱动器