处理没有 UI activity 的临时 Uri
Handling temporary Uri without a UI activity
我的应用处理用户共享的 Uri(注册到 intent.action.SEND
和 intent.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_SEND
和 ACTION_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 的读取权限传递给服务,然后该服务应该能够使用 ContentResolver
和 openInputStream()
读取内容。
我的应用处理用户共享的 Uri(注册到 intent.action.SEND
和 intent.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_SEND
和 ACTION_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 的读取权限传递给服务,然后该服务应该能够使用 ContentResolver
和 openInputStream()
读取内容。