我有碎片,它使用相机的活动。它等待通过意图发送的来自此活动的数据。在开始时,我在片段中注册了侦听器:
private var resultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
data?.let {
val file = File(data.extras?.getString("file_path")!!)
val uri = file.toUri()
}
}
}
然后单击按钮,启动目标活动:
val intent = Intent(context, CamActivity::class.java)
intent.putExtra("default_cam", true)
resultLauncher.launch(intent)
然后在拍摄照片后的目标活动中,我以这样的方式发送数据:
val data = Intent()
data.putExtra("file_path", file.absolutePath)
setResult(RESULT_OK, data)
finish()
这个问题与处理活动的结果有关。当我第一次打开应用程序时,我可以处理来自意图的数据并输入到data?.let{...
块。但是当我在其他应用程序中工作,然后打开这个照片片段时,我不会进入data?.let{...
块。我查看了照片数据被发送的相机活动,但是如果不重新打开应用程序,我的主机片段就无法接收到它。我试图以这样的方式注销这个接收器:
override fun onDestroyView() {
super.onDestroyView()
resultLauncher.unregister()
}
但这对我没什么帮助。
更新
我的场景:
H 121制作照片并将数据返回给相机片段AH 222H 123活动契约不能处理任何接收到的数据H 224G 225
发布于 2022-04-21 07:07:03
尝试使用提供的intent
,并在从CamActivity
发送数据时将Activity.RESULT_OK
设置为结果
intent.putExtra("file_path", file.absolutePath)
setResult(Activity.RESULT_OK, intent)
finish()
发布于 2022-07-15 09:40:13
我不知道确切的原因,但有一个解决方案是,我们每次完成处理一次后就重新创建片段。
activity?.recreate()
将这一行添加到从照相机或画廊获取图像的另一个片段中。
在我的例子中,在移动到前一个片段之后,然后在服务器上上传一个图像,然后再添加这一行
activity?.recreate()
会为我工作。
发布于 2022-04-21 06:54:49
确保在onAttach或onCreate中执行任务,即在显示活动之前。应该管用的。
fun openSomeActivityForResult() {
val intent = Intent(context, CamActivity::class.java)
intent.putExtra("default_cam", true)
resultLauncher.launch(intent)
}
var resultLauncher = registerForActivityResult(StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// There are no request codes
val data: Intent? = result.data
doSomeThing()
}
}
https://stackoverflow.com/questions/71949783
复制相似问题