Android 在没有UI活动的情况下处理临时Uri
我的应用程序处理用户共享的Uri(注册到Android 在没有UI活动的情况下处理临时Uri,android,uri,Android,Uri,我的应用程序处理用户共享的Uri(注册到intent.action.SEND和intent.action.SEND\u MULTIPLE) 我使用TCP解析和发送这些文件,但我想完全在后台完成 由于某些Uri的工作正常,我尝试共享Google Photos中的一张照片,但在处理完Uri数据之前,我的活动已被销毁,因此获得了许可 我曾尝试启动一项服务,认为Uri权限可能已“保存”,但我猜不是这样。 是否有任何方法可以在不显示阻塞UI活动的情况下处理Uri 我想完全在后台做这件事 ACTION\u
intent.action.SEND
和intent.action.SEND\u MULTIPLE
)我使用TCP解析和发送这些文件,但我想完全在后台完成 由于某些Uri的工作正常,我尝试共享Google Photos中的一张照片,但在处理完Uri数据之前,我的活动已被销毁,因此获得了
许可
我曾尝试启动一项服务,认为Uri权限可能已“保存”,但我猜不是这样。
是否有任何方法可以在不显示阻塞UI活动的情况下处理Uri
我想完全在后台做这件事
ACTION\u SEND
和ACTION\u SEND\u MULTIPLE
是活动操作。你别无选择,只能有一个活动来处理它们。欢迎您使用Theme.半透明的.NoTitleBar
作为“不可见”活动,但它仍然存在,并且仍然占据前景。通常,这样的活动会在onCreate()
中执行一些简短的操作,例如启动一些背景工作并显示一个Toast
,然后使用finish()
离开
我尝试过启动一个服务,认为Uri权限可能会被“保存”,但我猜不会
在用于启动服务的Intent
上添加FLAG\u GRANT\u READ\u URI\u PERMISSION
,并将URI
放在Intent
的“数据”方面:
new Intent(this, YourServiceClass.class)
.setData(yourUri)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
然后,通过调用Intent
上的getData()
获取服务中的Uri
。标志将把活动的读取权限传递给服务,然后服务应该能够使用ContentResolver
和openInputStream()
读取内容。感谢您的回复。看起来添加了数据和标志就成功了,服务现在可以解析数据了。但是,如何对多个Uri执行此操作?(ACTION\u SEND\u MULTIPLE
)@SagiLow:我会尝试newintent(getIntent()).setClassName(这是YourServiceClass.class)。addFlags(Intent.FLAG\u GRANT\u READ\u URI\u权限)
。希望复制构造函数通过ClipData
复制所有Uri
值。如果这不起作用,您必须使用所有Uri
值自己设置ClipData
,而不是使用setData()
。setClassName
中的第二个参数是类名,而不是class
,所以使用YourServiceClass.class.getName()
@SagiLow:Ah,很抱歉或者,使用setClass()
,它接受类。再次感谢!