用于在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())
希望这可以帮助