对非 SAF 内容的持久权限
Persistent permissions to non-SAF content
在我的应用程序中,我想存储对 Dropbox(以及其他内容提供商)提供的内容的持久读取权限。 Android Dropbox 应用程序不支持存储访问框架,因此为了能够 select 内容,我不能使用 ACTION_OPEN_DOCUMENT -- 相反,我需要使用 ACTION_GET_CONTENT .
但是,某些内容提供商(例如云端硬盘)似乎没有 return 通过 ACTION_GET_CONTENT 编辑的 URI return 持久许可。我相信这是预期的,因为 GET_CONTENT URI 不应该是持久的。不幸的是,我确实需要在重新启动时保留引用。
如果内容提供者不支持 SAF,那么在最近的 API 版本中似乎无法获得对 URI 的永久许可。真的吗?什么是好的解决方法?
不好的(对于我的用例)解决方法是:复制内容并将其存储在本地,依赖于不在规范中的实现细节(例如,似乎 Dropbox URI returned by GET_CONTENT 实际上是可持久化的),或者不持久化权限。
It seems that there is no way to get persistent permissions to a URI in recent API versions if the content provider doesn't support SAF. Is that true?
根据我的实验,是的。更准确地说,AFAICT,就框架提供的内容而言,只有从 DocumentsProvider
获得的 Uri
值才有机会获得持久权限。我看不出一个普通的 ContentProvider
怎么能提供这个。
What is a good workaround?
鉴于您的 "bad" 变通办法列表,您最好的变通办法是使用一些特定于 Dropbox 的 API 以允许用户选择内容并让您随着时间的推移访问它,如果 Dropbox提供一个。
在 "bad" 解决方法中,复制内容是一个可能的选择 - 调整您的 UI 以告诉用户您是 "importing" 内容,例如,以帮助指示它确实是一个副本。
在我的应用程序中,我想存储对 Dropbox(以及其他内容提供商)提供的内容的持久读取权限。 Android Dropbox 应用程序不支持存储访问框架,因此为了能够 select 内容,我不能使用 ACTION_OPEN_DOCUMENT -- 相反,我需要使用 ACTION_GET_CONTENT .
但是,某些内容提供商(例如云端硬盘)似乎没有 return 通过 ACTION_GET_CONTENT 编辑的 URI return 持久许可。我相信这是预期的,因为 GET_CONTENT URI 不应该是持久的。不幸的是,我确实需要在重新启动时保留引用。
如果内容提供者不支持 SAF,那么在最近的 API 版本中似乎无法获得对 URI 的永久许可。真的吗?什么是好的解决方法?
不好的(对于我的用例)解决方法是:复制内容并将其存储在本地,依赖于不在规范中的实现细节(例如,似乎 Dropbox URI returned by GET_CONTENT 实际上是可持久化的),或者不持久化权限。
It seems that there is no way to get persistent permissions to a URI in recent API versions if the content provider doesn't support SAF. Is that true?
根据我的实验,是的。更准确地说,AFAICT,就框架提供的内容而言,只有从 DocumentsProvider
获得的 Uri
值才有机会获得持久权限。我看不出一个普通的 ContentProvider
怎么能提供这个。
What is a good workaround?
鉴于您的 "bad" 变通办法列表,您最好的变通办法是使用一些特定于 Dropbox 的 API 以允许用户选择内容并让您随着时间的推移访问它,如果 Dropbox提供一个。
在 "bad" 解决方法中,复制内容是一个可能的选择 - 调整您的 UI 以告诉用户您是 "importing" 内容,例如,以帮助指示它确实是一个副本。