如何捕获onNewIntent()中的新的意图?

我想传递一个新的,但不同的意图到一个活动。 你如何区分新的意图和以前的意图? 什么样的代码进入onNewIntent()? 一个例子将是非常有帮助的。

新的意图是作为onNewIntent(Intent) 。 原始的Intent仍然可以通过getIntent()

你把你需要的任何代码放到onNewIntent中,以便用新的参数更新UI; 可能类似于你在onCreate做的事情。

此外,您可能需要调用setIntent(intent) ,以确保将来对Activity生命周期中getIntent()调用将获取最近的Intent数据。

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

  • 对于launchmode“标准”(默认),具有新意图的startActivity将导致一个onCreate,其意图是一个新的活动实例。

  • 对于launchmodes“singleTop”和“singleTask”,具有新意图的startActivity也会导致

a)具有意图的onCreate到活动的新实例(如果该活动未运行)[按照上面的“标准”]或b)具有意图到现有活动的onNewIntent(如果该活动已经运行) 。

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

您所调用的活动 – 主要活动

 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() { } } 

您的通话活动

代码转到以前的意图

 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 } } 

您的通话活动

代码使用这些意图开始新的活动

 public class CallingActivity extends Activity { public void onCreate(Bundle savedInstanceState) { Intent i=new Intent(this,MainActivity.class); startActivity(i);//will trigger New Activity ie MainActivity } } 

有一个与此相关的错误: http : //code.google.com/p/android/issues/detail?id=17137

如果你不希望你的活动在每个后续的onResume()重新使用新的意图,我会build议将意图存储在实例字段中而不是通过setIntent(intent)

这样,你可以重置该实例字段为空,一旦你已经消耗的意图,而不会丢弃原来的发射意图。

更多的细节在我的答案在这里: https : //stackoverflow.com/a/21261404/621690

setIntent(Intent)被Android框架工程师描述为一个错误: https : setIntent(Intent)