registerForActivityResult TakePicture не запускается - PullRequest
2 голосов
/ 21 июня 2020

Я пытаюсь создать новый registerForActivityResult для фотографирования. Я могу открыть Camera Intent, но после фотографирования обратный вызов не запускается, и я не вижу ничего о Результате действия или ошибке в 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)
        }
    }
}

функция createImageFile в 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
    }
}

Градация приложения:

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

1 Ответ

3 голосов
/ 22 июня 2020

Я обнаружил проблему.

Моя предыдущая функция onActivityResult все еще была там. Я подумал, может быть, старая функция может переопределить registerForActivityResult. Когда я удаляю старую функцию, registerForActivityResult работает очень хорошо.

...