如何捕获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)