4

我尝试使用新的 registerForActivityResult 拍照。我可以打开相机意图,但拍照后,没有触发回调,我看不到任何关于活动结果或 logcat 错误的信息。

我也试过RequestPermission,它被触发了。没找到,怎么回事

我的代码在这里:

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 函数:

@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
    }
}

应用分级:

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

2 回答 2

7

我发现了问题。

我之前的 onActivityResult 函数还在。我想也许旧函数可以覆盖 registerForActivityResult。当我删除旧功能时, registerForActivityResult 工作得很好。

于 2020-06-22T20:40:52.313 回答
0

就我而言,问题android:noHistory="true"出在容器活动(包含所有片段的活动)中。

删除这个registerForActivityResult()在片段中调用。

于 2021-11-11T10:23:33.140 回答