правильный способ сделать фото с - проблема с contentResolver - PullRequest
0 голосов
/ 08 марта 2020

У меня есть небольшая функция для фотографирования:

private fun takePhoto() {
    val values = ContentValues(1)
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values)
    val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    if(intent.resolveActivity(packageManager) != null) {
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

После съемки

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    doAsync {
        when (requestCode) {
            REQUEST_IMAGE_CAPTURE -> {

                if (resultCode == AppCompatActivity.RESULT_OK) {
                    try {
                        val b1cam = MediaStore.Images.Media.getBitmap(applicationContext.contentResolver, imageUri)
                    } catch (e: Exception) {
                        Log.e(TAG , e.toString())
                    }
                 .....

Этот код прекрасно работает на телефоне Nexus (с android 9) но не работает на android 10 телефоне Samsung.

Я получаю исключение: java .io.FileNotFoundException: java .io.FileNotFoundException: нет элементов в содержимом: // media / external / images / media / 21674

Когда Я получаю реальный путь в takePhoto, я получаю правильный путь и имя файла, и изображение там. Когда я пытаюсь получить путь в onActivityResult, я получаю android .database.CursorIndexOutOfBoundsException: индекс 0 запрошен, с исключением размера 0.

Когда я удаляю папку Pictures и заново создаю ее работает на телефоне android -10 без проблем, но только на некоторое время.

Где моя ошибка? Я думаю, что мы должны работать с contentResolver, а не с реальным путем, или я ошибаюсь?

...