I have the following custom ActivityResultContract
to allow the user to take a picture and receive the resulting image uri:
open class TakePictureActivityResultContract : ActivityResultContract<Uri, Uri?>() {
private lateinit var imageUri: Uri
@CallSuper
override fun createIntent(context: Context, input: Uri): Intent {
imageUri = input
return Intent(MediaStore.ACTION_IMAGE_CAPTURE)
.putExtra(MediaStore.EXTRA_OUTPUT, input)
}
final override fun getSynchronousResult(
context: Context,
input: Uri
): SynchronousResult<Uri?>? = null
@Suppress("AutoBoxing")
final override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
return if (resultCode == Activity.RESULT_OK) {
imageUri
} else {
null
}
}
}
But I'm facing a crash problem due to the imageUri
variable.
While the user is in the camera app and rotates the device, my app might be killed in background and the value stored in imageUri
is lost, leading into a crash when the camera app returns with an Activity.RESULT_OK
result.
kotlin.UninitializedPropertyAccessException: lateinit property imageUri has not been initialized
What's the best way to deal with this crash without having to get rid of the imageUri
variable?