Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在没有UI活动的情况下处理临时Uri_Android_Uri - Fatal编程技术网

Android 在没有UI活动的情况下处理临时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

我的应用程序处理用户共享的Uri(注册到
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()
,它接受
类。再次感谢!