registerForActivityResult TakePicture未触发 [英] registerForActivityResult TakePicture not triggered

查看:947
本文介绍了registerForActivityResult TakePicture未触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试对新的registerForActivityResult进行拍照.我可以打开相机意图",但是在拍照后,不会触发回调,并且我看不到任何有关活动结果"或logcat错误的信息.

I trying to new registerForActivityResult for taking picture. I can open Camera Intent, but after taking picture, callback is not triggered and i can't see anything about Activity Result or an error on logcat.

我也尝试了RequestPermission,它被触发了.我找不到,怎么了.

I tried also RequestPermission, it's triggered. I couldn't find, what's wrong.

我的代码在这里:

class UploadDocumentFragment {

    private val registerTakePicture = registerForActivityResult(
        ActivityResultContracts.TakePicture()
    ) { isSuccess ->
        if (isSuccess) {
            viewModel.addDocToRequest()
            viewModel.setSelectedDocument(null)
        } else {
            R.string.internal_error.showAsDialog { }
        }
    }

    //...

    private fun takeImage() {
        val photoFile: File? = viewModel.createImageFile()
        photoFile?.also {
            val photoURI: Uri = FileProvider.getUriForFile(
                requireContext(),
                BuildConfig.APPLICATION_ID +".fileProvider",
                it
            )
            registerTakePicture.launch(photoURI)
        }
    }
}

ViewModel上的createImageFile函数:

createImageFile function on ViewModel:

@Throws(IOException::class)
fun createImageFile(): File? {
    val imageFileName = selectedDocumentTypeLD.value?.visibleName
    return try {
        val file = File(storageDir, "$imageFileName.jpg")
        if (file.createNewFile() || file.exists()) {
            file
        } else {
            null
        }
    } catch (ex: IOException) {
        ex.printStackTrace()
        null
    }
}

应用gradle:

implementation 'androidx.activity:activity-ktx:1.2.0-alpha06'
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha06'

推荐答案

我发现了问题.

我以前的onActivityResult函数仍然存在.我以为旧功能可能会覆盖registerForActivityResult.当我删除旧功能时,registerForActivityResult效果很好.

My previous onActivityResult function was still there. I thought maybe the old function could override registerForActivityResult. When I remove the old function, registerForActivityResult works very well.

这篇关于registerForActivityResult TakePicture未触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆