7

我正在开发一个 android 相机应用程序,我们在几个场景中使用了 uris,例如将结果数据从我们的相机传递回启动我们获取结果的应用程序,或者当用户单击共享按钮时打开 IntentChooser。

目前我们在大多数情况下使用 File Uris,因为它似乎是更安全的解决方案。使用 ContentResolver 和 MediaStore 总是会出错。此外我记得前段时间有不少应用程序不支持 Content Uris,但 File Uris 非常好。

但是,我们现在收到 Google 的邮件,当用户决定不授予 Android 6.0 上的“环聊”文件访问权限时,使用 File Uris 交付不允许他们的“环聊”应用访问该文件。

我现在的问题是:在向其他应用程序提供内容时,我们通常应该从 File Uris 切换到 Content Uris 吗?这是要走的路吗?每个应用程序都应该依赖/支持 Content Uris 吗?

4

2 回答 2

5

是的,内容网址是要走的路。

对于相机应用程序,我不确定文件 url 是否非常明智——将文件传递给调用应用程序后,你怎么知道什么时候可以删除文件?使用内容 url,调用应用程序通过 url 请求数据,当您交付它时,您可以释放您的资源副本。(如果应用程序想要“永久”访问通过内容 url 访问的数据,则由它自己保存该数据)。

于 2015-10-08T11:06:23.543 回答
3

您应该使用内容 uri 在应用程序之间交换文件。从 Android 7.0 开始,您将在应用程序外部传递文件 uri 时收到 FileUriExposedException。这是从 android 7.0 开始的行为变化的摘录

对于面向 Android 7.0 的应用,Android 框架强制执行 StrictMode API 策略,该策略禁止在您的应用外部公开 file:// URI。如果包含文件 URI 的意图离开您的应用程序,则应用程序将失败并出现 FileUriExposedException 异常。

要在应用程序之间共享文件,您应该发送一个 content:// URI 并授予对 URI 的临时访问权限。

于 2017-09-15T13:35:44.317 回答