首页 > 解决方案 > Camera2 - 更改片段时“必须从片段主机的主线程调用”

问题描述

在使用以下代码Google Sample - Camera2Basic拍摄图像后,我正在尝试更改片段。

我在上面示例的第 839 行实现了对 MainActivity 的回调。但是,当我尝试从该回调遍历到不同的活动时,我收到以下异常:

java.lang.IllegalStateException:必须从片段主机的主线程调用

有人知道吗?

标签: javaandroidandroid-fragmentsexception

解决方案


我在 Kotlin 中有工作代码您必须将此回调替换为:

  val captureCallback = object : CameraCaptureSession.CaptureCallback() {

            override fun onCaptureCompleted(session: CameraCaptureSession,
                                            request: CaptureRequest,
                                            result: TotalCaptureResult) {
                sendBackResult(mFile)
            }
        }

        mCaptureSession!!.capture(captureBuilder.build(), captureCallback, mBackgroundHandler)
    } catch (e: CameraAccessException) {
        e.printStackTrace()
    }

sendBackResult 方法如下:

private fun sendBackResult(resultFile: File?) {
    val fileUri = Uri.fromFile(resultFile)
    val dataIntent = Intent()
    dataIntent.data = fileUri
    dataIntent.putExtra("isFront", isFrontCamera)
    activity!!.setResult(Activity.RESULT_OK, dataIntent)
    activity!!.finish()
}

推荐阅读