从 SharedPreferences 的文件中读取内容 Uri 并获得对其的持久权限

Read content Uri from File from SharedPreferences and get persistent permission on it

可以通过应用选择器从文件资源管理器调用我的应用。 我从传输的 PDF 文件中捕获给定的 contentUri 并使用 sharedPreferences.

保存内容 uri

如果我再次启动我的应用程序,我想再次打开保存的 PDF 文件(从 sharedPreferences 读取 contentUri)。 但不应再打开文件选择器。

但我无法通过 App Chooser 调用 ACTION_OPEN_DOCUMENT,因为我直接从 sharedpreferences 获得 uri。我也不能打电话 getContentResolver().takePersistableUriPermission(uri, takeFlags);.

所以我无法再次访问此文件。

我怎样才能获得对文件的永久访问权。复制到 INTERNAL_STORAGE 真的是唯一的解决方案吗?

谢谢, 亚历杭德罗

I catch the given contentUri from the transmitted PDF file

根据您在评论中对我的问题的回复,我将此解释为:您正在从入站 Intent 获得 Uri 到您的一项活动,例如通过 ACTION_VIEWACTION_SEND.

and save the content uri useing sharedPreferences

那是行不通的。

Uri 视为类似于 URL 的受密码保护的网站。只要会话 cookie 正常,URL 就可以工作,但是一旦该会话过期或清除 cookie,URL 就没用了。

同样,that Uri is good at most for your running process,对此您无能为力。

如果您需要长期访问内容,可以:

  • 在您控制的某个文件中复制该内容,或者

  • 停止响应 ACTION_VIEW/ACTION_SEND,而是使用 ACTION_OPEN_DOCUMENTtakePersistableUriPermission()