Android中onActivityResult里intent与getIntent()的区别及问题排查
Android中onActivityResult的intent与getIntent()的区别及问题解决
一、核心概念区分
- onActivityResult的intent参数:这是你编写的
HijackImplicitIntentsActivity通过setResult()返回给发起startActivityForResult()的目标Activity的结果数据容器,对应你代码里的intent_result_flag12,仅用于传递返回的业务数据。 - getIntent():在目标Activity中调用该方法,获取的是启动目标Activity自身的原始Intent——也就是目标Activity被首次打开时系统传递给它的Intent,和你返回的结果Intent是完全独立的两个对象。
二、你的问题根源
目标Activity的onActivityResult判断条件if (intent == null || getIntent() == null || !getIntent().getBooleanExtra("LOGIN", false))一直触发返回,原因有两点:
- 你错误地将
LOGIN参数放到了返回给目标Activity的结果Intent中,但该条件检查的是目标Activity自身的启动Intent是否包含LOGIN=true的参数; - 你设置的
LOGIN值为false,即便参数位置正确,取反后也会让条件成立。
当前目标Activity的启动Intent(比如从桌面启动的默认Intent)根本没有LOGIN参数,所以getIntent().getBooleanExtra("LOGIN", false)会返回默认值false,取反后为true,直接触发return逻辑。
三、代码修正方案
要让条件不成立,你需要让目标Activity的getIntent()包含LOGIN=true的参数。结合目标Activity的逻辑,可通过以下方式实现:
方案:修改目标Activity的启动Intent
如果可以控制目标Activity的启动流程,直接在启动它时为Intent添加LOGIN参数:
// 在你的应用中启动目标Activity时添加参数 Intent launchTarget = new Intent("你的目标Activity包名.目标Activity类名"); launchTarget.putExtra("LOGIN", true); startActivity(launchTarget);
补充:简化你的返回Intent代码
你当前的返回Intent设置逻辑可以简化,且token参数的设置是符合要求的:
Intent resultIntent = new Intent(); resultIntent.putExtra("token", 1094795585); setResult(RESULT_OK, resultIntent); finish();
内容的提问来源于stack exchange,提问作者Vinay
相关产品推荐
相关产品推荐

