处理没有 UI activity 的临时 Uri

Handling temporary Uri without a UI activity

我的应用处理用户共享的 Uri(注册到 intent.action.SENDintent.action.SEND_MULTIPLE
我使用 TCP 解析并发送这些文件,但我想完全在后台执行此操作。

由于一些 Uri 的工作正常,我尝试从 Google Photos 中分享一张照片并得到 Permission Daniel 异常,因为我的 activity 在我处理完 Uri 数据之前被破坏了。

我曾尝试启动一项服务,认为 Uri 权限可能是 'saved',但我想它不是。
有什么方法可以在不显示阻塞的情况下处理 Uri UI activity?

I want to do this completely on the background.

ACTION_SENDACTION_SEND_MULTIPLE 是 activity 操作。您别无选择,只能使用 activity 来处理它们。欢迎您让 activity 使用 Theme.Translucent.NoTitleBar 成为 "invisible" activity,但它仍然存在并且仍然占据前台。通常,这样的 activity 会在 onCreate() 中做一些简短的事情,例如启动一些后台工作并显示 Toast,然后使用 finish() 消失。

I've tried starting a service thinking the Uri permission might be 'saved' but I guess it's not

在用于启动服务的 Intent 上添加 FLAG_GRANT_READ_URI_PERMISSION,并将 Uri 放在 Intent 的 "data" 方面:

new Intent(this, YourServiceClass.class)
  .setData(yourUri)
  .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

然后,在Intent上调用getData()获取服务中的Uri。该标志会将 activity 的读取权限传递给服务,然后该服务应该能够使用 ContentResolveropenInputStream() 读取内容。