我试着用新的registerForActivityResult拍照。我可以打开摄像头意图,但拍照后没有触发回调,也看不到Activity结果或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
}
}App gradle:
implementation 'androidx.activity:activity-ktx:1.2.0-alpha06'
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha06'发布于 2020-06-23 04:40:52
我找到问题了。
我之前的onActivityResult函数仍然存在。我想也许旧的函数可以覆盖registerForActivityResult。当我删除旧函数时,registerForActivityResult运行得很好。
发布于 2021-11-11 10:23:33
在我的例子中,问题是容器活动(包含所有片段的活动)中的清单中的android:noHistory="true"。
在片段中删除名为registerForActivityResult()的代码。
https://stackoverflow.com/questions/62497463
复制相似问题