对非SAF内容的持久权限

时间:2017-05-10 10:21:47

标签: android android-contentprovider storage-access-framework

在我的应用中,我想对Dropbox(以及其他内容提供商)提供的内容存储持久读取权限。 Android Dropbox应用程序不支持存储访问框架,因此为了能够选择内容,我无法使用ACTION_OPEN_DOCUMENT - 而是需要使用ACTION_GET_CONTENT。

但是,某些内容提供程序(如Drive)似乎不会返回通过ACTION_GET_CONTENT返回的URI的可持久权限。我相信这是预期的,因为GET_CONTENT URI不应该是可持久的。不幸的是,我确实需要在重新启动时保持引用。

如果内容提供商不支持SAF,似乎无法获得最近API版本中URI的持久权限。真的吗?什么是好的解决方法?

糟糕(对于我的用例)解决方法是:复制内容并将其存储在本地,依赖于不符合规范的实现细节(例如,似乎GET_CONTENT返回的Dropbox URI实际上是可持久的),或者不持久许可。

1 个答案:

答案 0 :(得分:1)

  

如果内容提供商不支持SAF,似乎无法获得最近API版本中URI的持久权限。这是真的吗?

根据我的实验,是的。更准确地说,AFAICT,从Uri获得的DocumentsProvider值只有在框架提供的内容方面具有持久权限。我看不出普通的ContentProvider如何提供这个。

  

什么是好的解决方法?

鉴于你的名单"坏"解决方法,您最好的解决方法是使用一些特定于Dropbox的API,以允许用户选择内容,并让您随着时间的推移访问它,如果Dropbox提供的话。

"坏"解决方法,复制内容是一个可能的选择 - 调整你的用户界面告诉用户你是"导入"例如,内容有助于表明它确实是一个副本。