用于在Android中启动新活动的多个Intent标志
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于在Android中启动新活动的多个Intent标志相关的知识,希望对你有一定的参考价值。
我正在尝试在Intent中添加更多标志,以便在BroadcastReceiver中启动一个新的Activity,响应从应用程序的另一部分发送的特定意图。我已经注意到我在LogCat消息中注意到我创建的Intent中的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做这件事的简单方法见片段see example snapshot
startActivity(intentFor()。clearTask()。newTask()。noHistory())
希望这可以帮助
以上是关于用于在Android中启动新活动的多个Intent标志的主要内容,如果未能解决你的问题,请参考以下文章
为啥 context.startActivity(intent) 没有启动活动以及如何在 android 中处理异常?
Android-----Intent中通过startActivity(Intent intent )隐式启动新的Activity