我想将一些数据从孩子的活动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()
最后,我在ActivityMain
中使用onActivityResult的重写捕获了数据:
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
。我远远没有涉及意图的所有内容,而且我可能在这里遗漏了一些东西,所以如果有人可以帮助我并解释一下!
答案 0 :(得分:0)
您可以考虑将此标志FLAG_ACTIVITY_FORWARD_RESULT
添加到您的returnedIntent
中。 https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_FORWARD_RESULT
如果已设置并且此意图用于从现有活动启动新活动,则现有活动的回复目标将转移到新活动。这样,新活动可以调用Activity.setResult(int)并将结果发送回原始活动的回复目标。
答案 1 :(得分:0)
因此,感谢@Bach Vu和本文:Intent.FLAG_ACTIVITY_FORWARD_RESULT and PendingIntent,我设法通过共享首选项获得了想要的东西。我将数据存储在ActivityChild
中的共享首选项中,并使用onActivityResult的覆盖在ActivityMain
中进行检索