在 Android 中启动新 Activity 的多个 Intent 标志
Multiple Intent flags for starting a new Activity in Android
我正在尝试在 Intent 中添加更多标志以在 BroadcastReceiver 中启动新的 Activity,以响应从应用程序的另一部分发送的特定 Intent。
正如我在 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?
使用 addFlags()
而不是 setFlags()
来添加额外的标志。
http://developer.android.com/reference/android/content/Intent.html#addFlags(int)
setFlags()
设置要使用的完整标志集,因此您必须 |
此处使用的所有标志。 addFlags()
可以多次调用,为你做|
的flags。
setFlags
只需分配参数,正如您从片段
中看到的那样
public Intent setFlags(int flags) {
mFlags = flags;
return this;
}
所以在你的情况下你只是分配最后一个。要修复它,请将其放在 or
上
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;
}
使用 kotlin 和 anko 的简单方法见片段
see example snapshot
startActivity(intentFor().clearTask().newTask().noHistory())
希望这对您有所帮助
我正在尝试在 Intent 中添加更多标志以在 BroadcastReceiver 中启动新的 Activity,以响应从应用程序的另一部分发送的特定 Intent。
正如我在 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?
使用 addFlags()
而不是 setFlags()
来添加额外的标志。
http://developer.android.com/reference/android/content/Intent.html#addFlags(int)
setFlags()
设置要使用的完整标志集,因此您必须 |
此处使用的所有标志。 addFlags()
可以多次调用,为你做|
的flags。
setFlags
只需分配参数,正如您从片段
public Intent setFlags(int flags) {
mFlags = flags;
return this;
}
所以在你的情况下你只是分配最后一个。要修复它,请将其放在 or
上 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;
}
使用 kotlin 和 anko 的简单方法见片段 see example snapshot
startActivity(intentFor().clearTask().newTask().noHistory())
希望这对您有所帮助