我正在为Android相机应用程序开发,我们在几种情况下使用uris,例如将结果数据从我们的相机传送回启动我们的应用程序,或者当用户点击共享按钮时打开IntentChooser。
目前我们在大多数情况下使用File Uris,因为它似乎是更安全的解决方案。使用ContentResolver和MediaStore总会出现问题。此外我记得前段时间有很多应用程序,它们不支持内容Uris,但文件Uris非常好。
但是,当用户决定不在Android 6.0上提供“环聊”文件访问权限时,我们现在通过Google邮寄了与文件Uris一起提供的“环聊”应用无法访问该文件。
我现在的问题是:在向其他应用提供内容时,我们是否应该从File Uris切换到Content Uris?这是要走的路,每个应用都应该依赖/支持内容Uris吗?
答案 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的临时访问权限。