gpt4 book ai didi

image - 如何将图像保存在 android Q 的子目录中,同时保持向后兼容

转载 作者:行者123 更新时间:2023-12-04 08:01:44 25 4
gpt4 key购买 nike

我正在创建一个简单的图像编辑器应用程序,因此需要加载和保存图像文件。我希望保存的文件出现在画廊中的单独相册中。从 Android API 28 到 29,应用程序能够访问存储的程度发生了巨大变化。我可以在 Android Q (API 29) 中做我想做的事,但这种方式不向后兼容。

当我想在较低的 API 版本中获得相同的结果时,到目前为止,我只找到了需要使用不推荐使用的代码(从 API 29 开始)的方法。

这些包括:

  • MediaStore.Images.Media.DATA的使用专栏
  • 通过 Environment.getExternalStoragePublicDirectory(...) 获取外部存储的文件路径
  • 通过 MediaStore.Images.Media.insertImage(...) 直接插入图像

  • 我的问题是:是否有可能以这种方式实现它,所以它是向后兼容的,但不需要弃用的代码?如果不是,在这种情况下可以使用已弃用的代码,还是这些方法很快会从 sdk 中删除?无论如何,使用不推荐使用的方法感觉非常糟糕,所以我宁愿不要:)

    这是我发现的适用于 API 29 的方式:

    ContentValues values = new ContentValues();
    String filename = System.currentTimeMillis() + ".jpg";

    values.put(MediaStore.Images.Media.TITLE, filename);
    values.put(MediaStore.Images.Media.DISPLAY_NAME, filename);
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
    values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
    values.put(MediaStore.Images.Media.RELATIVE_PATH, "PATH/TO/ALBUM");

    getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);

    然后我使用 insert 方法返回的 URI 来保存位图。问题是在 API 29 中引入了 RELATIVE_PATH 字段,因此当我在较低版本上运行代码时,图像被放入“图片”文件夹而不是“PATH/TO/ALBUM”文件夹。

    最佳答案

    这是对我有用的代码。此代码将图像保存到手机上的子目录文件夹中。它检查手机的android版本,如果它高于android q,它运行所需的代码,如果低于它,它运行else语句中的代码。
    来源:https://androidnoon.com/save-file-in-android-10-and-below-using-scoped-storage-in-android-studio/

     private void saveImageToStorage(Bitmap bitmap) throws IOException {
    OutputStream imageOutStream;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DISPLAY_NAME,
    "image_screenshot.jpg");
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    values.put(MediaStore.Images.Media.RELATIVE_PATH,
    Environment.DIRECTORY_PICTURES + File.pathSeparator + "AppName");

    Uri uri =
    getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    values);

    imageOutStream = getContentResolver().openOutputStream(uri);

    } else {

    String imagesDir =
    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES). toString() + "/AppName";
    File image = new File(imagesDir, "image_screenshot.jpg");
    imageOutStream = new FileOutputStream(image);
    }


    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageOutStream);
    imageOutStream.close();


    }

    关于image - 如何将图像保存在 android Q 的子目录中,同时保持向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030990/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com