首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >registerForActivityResult在安卓系统中不能正常工作

registerForActivityResult在安卓系统中不能正常工作
EN

Stack Overflow用户
提问于 2022-04-21 06:23:21
回答 3查看 1.6K关注 0票数 0

我有碎片,它使用相机的活动。它等待通过意图发送的来自此活动的数据。在开始时,我在片段中注册了侦听器:

代码语言:javascript
运行
复制
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()
}

}


}

然后单击按钮,启动目标活动:

代码语言:javascript
运行
复制
val intent = Intent(context, CamActivity::class.java)
intent.putExtra("default_cam", true)
resultLauncher.launch(intent)

然后在拍摄照片后的目标活动中,我以这样的方式发送数据:

代码语言:javascript
运行
复制
val data = Intent()
data.putExtra("file_path", file.absolutePath)
setResult(RESULT_OK, data)
finish()

这个问题与处理活动的结果有关。当我第一次打开应用程序时,我可以处理来自意图的数据并输入到data?.let{...块。但是当我在其他应用程序中工作,然后打开这个照片片段时,我不会进入data?.let{...块。我查看了照片数据被发送的相机活动,但是如果不重新打开应用程序,我的主机片段就无法接收到它。我试图以这样的方式注销这个接收器:

代码语言:javascript
运行
复制
override fun onDestroyView() {
super.onDestroyView()
resultLauncher.unregister()
}

但这对我没什么帮助。

更新

我的场景:

  1. 用片段A打开我的应用程序B(这里我们可以打开凸轮活动)和活动C (cam活动)
  2. 打开A ->移动到B ->并按btn进行摄像机活动(C)打开
  3. 制作一些照片
  4. 返回数据从C到片段B
  5. 在活动结果中处理它(非摄像机fragment)
  6. return to B ->按btn和开放摄像机活动(C)

H 121制作照片并将数据返回给相机片段AH 222H 123活动契约不能处理任何接收到的数据H 224G 225

EN

回答 3

Stack Overflow用户

发布于 2022-04-21 07:07:03

尝试使用提供的intent,并在从CamActivity发送数据时将Activity.RESULT_OK设置为结果

代码语言:javascript
运行
复制
intent.putExtra("file_path", file.absolutePath)
setResult(Activity.RESULT_OK, intent)
finish()
票数 1
EN

Stack Overflow用户

发布于 2022-07-15 09:40:13

我不知道确切的原因,但有一个解决方案是,我们每次完成处理一次后就重新创建片段。

activity?.recreate()

将这一行添加到从照相机或画廊获取图像的另一个片段中。

在我的例子中,在移动到前一个片段之后,然后在服务器上上传一个图像,然后再添加这一行

activity?.recreate()会为我工作。

票数 1
EN

Stack Overflow用户

发布于 2022-04-21 06:54:49

确保在onAttach或onCreate中执行任务,即在显示活动之前。应该管用的。

代码语言:javascript
运行
复制
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()
        }
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71949783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档