gpt4 book ai didi

Android 11 URI 使用情况(文件 ://content://)

转载 作者:行者123 更新时间:2023-12-05 00:18:45 25 4
gpt4 key购买 nike

我们有一些类似词的老问题,但其中大多数是关于转换一个或另一个。
我在这里看到的是新更改后 URI 使用的“正确”行为。让我给出一些背景:
之前 当我们得到一个图像 URI 时,这将返回 file://...格式。
但是由于新的操作系统权限发生了变化,我们不应该在哪里使用 WRITE_EXTERNAL_STORAGE我们应该再使用 getUriForFile(..)返回 content://...路径。(范围存储使用情况Android 11 Storage FAQ)
这可以在一些 Android 指南中找到,例如:taken photos guide
“问题”是许多用户习惯于使用裁剪图像的URI(例如)来创建它的文件并保存它。
现在,随着这些变化而来的问题是:
我们应该如何使用 URI?

  • 编写一些代码来检查 Android 版本,如果超过 29 我们应该为 URI 创建一个新的文件路径?
  • 让 URI 成为图像的路径(contentfile ),如果有人想保存它,则需要创建自己的文件路径
  • 我还没有了解如何正确使用 URI 的其他内容。

  • Obs:问这个,因为 Android Image Crop 开源项目移交,我们需要升级 Android 10/11 的权限,但现在我们有这个内容/文件问题。 More here
    编辑 :
    正如评论所指出的
    代码返回 file:// (自更改后不再有效)
    Uri outputFileUri = null;
    outputFileUri = Uri.fromFile(
    new File(context.getExternalCacheDir().getPath(),
    "pickImageResult.jpeg")
    );

    代码返回 content://
    outputFileUri = FileProvider.getUriForFile(
    context,
    context.getPackageName() + CommonValues.authority,
    File.createTempFile("pickImageResult", ".jpeg", getImage)
    );

    最佳答案

    The "problem" is that many users got used to use the URI of a crop image (for example) to create a file of it and save it.


    最后,这是您的图书馆,您需要记录任何 Uri您返回的适合。毕竟,一个 Uri可以指向:
  • 文件系统上的一个文件 ( file )
  • 一个 Web 资源( https ,或者可能是 http )
  • Android 资源 ( android.resource )
  • 应用中的 Assets (file://android_asset)
  • 一些任意字节集(content)

  • 您的库用于图像裁剪。虽然我没有检查实现,但我假设它在应用程序本身内都可以工作。如果是这样,返回 file 没有任何问题。 Uri ,如果你想这样做。您的代码正在某处写入文件(例如 getCacheDir() 上的 Context )。使用您的库的应用程序必须有权访问该文件,否则您会在尝试编写它时崩溃。一个 Uri通过 Uri.fromFile() 创建,对于该文件,非常好......在那个应用程序中。
    在哪里 Uri.fromFile()成为一个问题是在传递 Uri到另一个应用程序。但是,您的库用于裁剪图像,而不是与其他应用程序共享内容。恕我直言,您的工作是将裁剪后的图像返回给应用程序。应用程序如何使用它取决于该应用程序,但受 Uri 中的任何限制限制。你交出来的。
    您似乎正在考虑的两个选项有不同的问题:

    Uri资源
    优点
    缺点

    Uri.fromFile()便宜,简单
    只能在应用程序本身内使用;不能传递给其他应用
    FileProvider Uri可以传递给其他应用
    需要库和 list 配置;无法轻松访问基础文件


    由于恕我直言,图像裁剪器不是图像共享解决方案, Uri.fromFile()似乎有道理。如果使用您图书馆的应用程序想要转身并分享裁剪后的图像,他们将设置 FileProvider自己和使用 FileProvider.getUriForFile() .唯一需要注意的是,要么您需要记录文件的写入位置,要么让他们选择告诉您使用哪个目录——设置 FileProvider 需要这些信息。元数据。
    有一天,如果您选择更改 API,您可能会考虑返回一个普通的 File而不是 Uri .这样,就不会混淆它所代表的含义。
    但是,最终,这一切都是你的决定。如果你想使用 FileProvider ,或者您想将图像上传到您自己的 Web 服务器并使用 https ,这完全取决于你。但是,您应该记录您在做什么以及 Uri 的内容。代表。

    关于Android 11 URI 使用情况(文件 ://content://),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66857964/

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