用于在Android中启动新Activity的多个Intent标志

我试图在Intent中添加更多的标志,以便在BroadcastReceiver中启动一个新的Activity,响应从应用程序的另一部分发送的特定意图。 我已经添加,因为我注意到了LogCat消息在我创建的意图FLAG_ACTIVITY_NEW_TASK标志,然后其他的,但我在LogCat中得到相同的错误,因为FLAG_ACTIVITY_NEW_TASK不在那里。

代码如下:

  public class actReceiver extends BroadcastReceiver { ... public void onReceive(Context context, Intent intent) { ... else if (intent.getAction().equals("something")) { Intent prefAct = new Intent(context, PreferencesActivity.class) prefAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(prefAct); } ... } ... } 

而特定的LogCat错误:

 Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 

您可以从代码片段中看到setFlags只是分配参数

 public Intent setFlags(int flags) { mFlags = flags; return this; } 

所以在你的情况下,你只是分配最后一个。 要修复它把它或

  prefAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

或者使用addFlags来做同样的事情

 public Intent addFlags(int flags) { mFlags |= flags; return this; } 

使用addFlags()而不是setFlags()来添加额外的标志。

http://developer.android.com/reference/android/content/Intent.html#addFlags(int)

setFlags()设置要使用的全套标志,所以你必须| 所有的标志在这里使用。 addFlags()可以被多次调用,并执行| 的标志为你。

用kotlin和anko做简单的方法看snippet 看示例快照

startActivity(intentFor()。clearTask()。newTask()。noHistory())

希望这可以帮助