Я звоню startActivityForResult и нахожу, что onActivityResult не вызывается - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь выбрать изображение из галереи и применить его к текстовому представлению.

Я сделал вызов функции startActivityForResult () и переопределил функцию onActivityResult (), но при тестировании я обнаружил, что onActivityResult () не вызывается. В чем причина?

Имеет super.onActivityResult (requestCode, resultCode, data)


var intent: Intent = Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
               startActivityForResult(intent, IMG_RESULT)


            }


        }

    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
//I made this toast to see if the program arrived to onActivityResult but it never showed
        Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show()

        if (resultCode == Activity.RESULT_OK)
            if (data != null) {
                val contentURI = data!!.data
                try {

                    val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, contentURI)
                    val path = saveImage(bitmap)
                    Toast.makeText(this@MainActivity, "Image Saved!", Toast.LENGTH_SHORT).show()
                    image_blank!!.setImageBitmap(bitmap)

                } catch (e: IOException) {
                    e.printStackTrace()
                    Toast.makeText(this@MainActivity, "Failed!", Toast.LENGTH_SHORT).show()
                }


            }


    }

    fun saveImage(myBitmap: Bitmap): String {

Ответы [ 3 ]

0 голосов
/ 30 апреля 2019

Две возможности:

  1. onActivityResult никогда не вызывается, если ваша активность устанавливает для noHistory значение true.

    android: noHistory = "true"

Этот метод никогда не вызывается, если ваша активность устанавливает для noHistory значение true.https://developer.android.com/reference/android/app/Activity.html#startActivityForResult

код запроса <0, не вызовет onActivityResult (не смог найти его где-либо задокументированным, но согласно комментариям многих коллег-разработчиков). </li>

requestCode int: If> =0, этот код будет возвращен в onActivityResult () при выходе из операции, как описано в startActivityForResult (Intent, int).

0 голосов
/ 30 апреля 2019

Если вы звоните startActivityForResult из fragment, убедитесь, что родительское действие распространит результат.

В вашей деятельности

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case A_REQUEST_CODE_USED_IN_YOUR_ACTIVITY:
            ...
            break;
        case ANOTHER_REQUEST_CODE_USED_IN_YOUR_ACTIVITY:
            ...
            break;
        default:
            // this will propagate the result to your Fragment
            super.onActivityResult(requestCode, resultCode, data);
    }
}

В вашем фрагменте

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case IMG_RESULT:
            if (resultCode = RESULT_OK) {
                // put here your code
                ...
            }
            break;
        default:
            super.onActivityResult(requestCode, resultCode, data);
    }
}
0 голосов
/ 30 апреля 2019

При использовании android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI нет гарантии, что пользователь выберет изображение.

Приведенное ниже решение ограничит пользователя выбором изображения и не указывает, из какого места это будет сделано -пользователь может свободно перемещаться и выбирать то, что он хочет.

 val intent = Intent(Intent.ACTION_GET_CONTENT)
 intent.type = "image/*"
 intent.putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/jpeg", "image/png", "image/bmp"))
 startActivityForResult(intent, IMG_RESULT)

Это точное решение работает в моем проекте и должно быть в порядке и для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...