如何在onNewIntent()中捕获新的Intent?

use*_*132 39 android android-intent

我想将一个新的但不同的Intent传递给一个Activity.你如何区分新的Intent和之前的Intent?onNewIntent()中有什么样的代码?一个例子将非常有用.

Chr*_*Orr 82

新的意图作为一部分onNewIntent(Intent).原件Intent仍可通过getIntent().

您将所需的任何代码放入onNewIntent其中以使用新参数更新UI; 可能与你正在做的相似onCreate.

此外,你可能想调用setIntent(intent)onNewIntent,以确保未来的调用getIntent()内的活动周期获得最新的Intent数据.


Tor*_*rid 22

意图如何到达您的活动取决于launchMode(请参阅http://developer.android.com/guide/topics/manifest/activity-element.html#lmode上的launchmode文档).

  • 对于launchmode"standard"(默认值),具有新意图的startActivity将导致onCreate具有该活动的新实例的意图.

  • 对于launchmodes"singleTop"和"singleTask",具有新意图的startActivity将导致

a)具有该意图的onCreate活动的新实例(如果该活动未运行)[根据上面的"标准"]或b)具有该意图的onNewIntent到现有活动(如果该活动已经运行) .

对于b),第二个意图在onNewIntent参数中可用.你用它做什么取决于你的应用程序.一些应用程序将忽略它,而其他应用程序将执行setIntent()并开始重新初始化/更新处理新意图.

  • 目前我正在使用singleTask,但这两种方法都没有在我的代码中根据日志... :( (2认同)

Vik*_*tel 13

您的被叫活动 - 主要活动

public class MainActivity extends Activity
{
    public void onCreate(Bundle SavedInstanceState)
    {
    }

    @Override
    protected void onNewIntent(Intent intent) 
    {
        super.onNewIntent(intent);
        if(intent.getStringExtra("methodName").equals("myMethod"))
        {
            myMethod();
        }
    }

    public void myMethod()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

您的通话活动

代码转到Previous Intent

public class CallingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        Intent i=new Intent(this,MainActivity.class);
        i.putExtra("methodName","myMethod");//goes to previous INtent
        startActivity(i);//will trigger only myMethod in MainActivity
    }
}
Run Code Online (Sandbox Code Playgroud)

您的通话活动

代码使用这些意图启动新活动

public class CallingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        Intent i=new Intent(this,MainActivity.class);
        startActivity(i);//will trigger New Activity i.e. MainActivity
    }
}
Run Code Online (Sandbox Code Playgroud)