setResult (Activity.RESULT_OK, returnIntent) из дочерней активности всегда возвращает мне Activity.CANCELED для основной активности - PullRequest
0 голосов
/ 07 марта 2019

Я хочу вернуть некоторые данные из моего дочернего занятия ActivityChild в основное занятие ActivityMain

Сначала я звоню своему ActivityChild из моего ActivityMain таким образом:

val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivityForResult(intent, 1)
// Actually, this code first launch chrome, then when the user identify on
// chrome, the redirect_uri calls the ActivityChild

затем я возвращаю свои данные из ActivityChild в ActivityMain следующим образом:

val data: Uri? = intent.data
val returnedIntent = Intent();
returnedIntent.putExtra("code", data!!.getQueryParameter("code"))
setResult(Activity.RESULT_OK, returnedIntent)
finish()

и, наконец, я получаю данные с переопределением onActivityResult в ActivityMain:

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == 1) {
        if (resultCode == Activity.RESULT_OK) {
            val returnedValue = data!!.getStringExtra("data")
        }
        else if (resultCode == Activity.RESULT_CANCELED)
            Log.d("mDebug", "Couldn't retrieve data") // Always enters here
        else
            Log.d("mDebug", "final")
    }
}

Он продолжает идти в состоянии Activity.RESULT_CANCELED.Я не могу решить эту проблему, если она разрешима.

Я полагаю, что причина в том, что я впервые запускаю Chrome через намерение и что каким-то образом данные не могут быть переданы в ActivityMain,Я далек от того, чтобы знать все, что касается намерений, и я, возможно, что-то здесь упускаю, так что, если кто-то может мне помочь и объяснить это, пожалуйста!

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Итак, благодаря @Bach Vu и этому сообщению: Intent.FLAG_ACTIVITY_FORWARD_RESULT и PendingIntent Мне удается получить то, что я хотел, с помощью общих преференций. Я храню свои данные в общих настройках в ActivityChild и извлекаю их в моем ActivityMain, используя переопределение onActivityResult

0 голосов
/ 07 марта 2019

Вы можете добавить этот флаг FLAG_ACTIVITY_FORWARD_RESULT к вашему returnedIntent. Здесь описано https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_FORWARD_RESULT

Если установлено и это намерение используется для запуска нового действия из существующего, тогда цель ответа существующего действия будет перенесена в новое действие. Таким образом, новое действие может вызвать Activity.setResult (int), и этот результат будет отправлен обратно в цель ответа исходного действия.

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