内容Uri与文件Uri:将来要使用什么?

时间:2015-10-08 10:42:37

标签: android android-contentprovider file-permissions android-6.0-marshmallow file-uri

我正在为Android相机应用程序开发,我们在几种情况下使用uris,例如将结果数据从我们的相机传送回启动我们的应用程序,或者当用户点击共享按钮时打开IntentChooser。

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

但是,当用户决定不在Android 6.0上提供“环聊”文件访问权限时,我们现在通过Google邮寄了与文件Uris一起提供的“环聊”应用无法访问该文件。

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

2 个答案:

答案 0 :(得分:4)

是的,内容Url是可行的方式。

对于相机应用程序,我不确定文件网址是否非常明智 - 将文件传递给调用应用程序,您如何知道何时可以删除文件?使用内容网址,调用应用程序通过网址请求数据,当您交付数据时,您可以释放资源副本。 (如果应用程序希望“永久”访问通过内容网址访问的数据,则由它来保存该数据本身)。

答案 1 :(得分:2)

您应该使用内容uri在应用程序之间交换文件。从Android 7.0开始,您将在文件uri外部传递FileUriExposedException。 以下是behaviour changes starting android 7.0

的摘录
  

对于定位到Android 7.0的应用,Android框架会强制执行StrictMode API策略,禁止在应用外部公开file:// URI。如果包含文件URI的intent离开了您的应用程序,则该应用程序将失败,并显示FileUriExposedException异常。

     

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