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

Arr*_*tti 3 flags android broadcastreceiver android-intent android-activity

我正在尝试在 Intent 中添加更多标志,以便在 BroadcastReceiver 内启动新的 Activity,以响应从应用程序的其他部分发送的特定意图。正如我通过 LogCat 消息注意到的那样,我FLAG_ACTIVITY_NEW_TASK在我创建的 Intent 处添加了标志,然后添加了其他标志,但我在 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);
            }
     ... }
... }
Run Code Online (Sandbox Code Playgroud)

以及特定的 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?
Run Code Online (Sandbox Code Playgroud)

Bla*_*elt 5

setFlags只需分配参数,正如您从代码片段中看到的那样

public Intent setFlags(int flags) {
    mFlags = flags;
    return this;
}
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,你只需分配最后一个。要修复它,请将其放在或

 prefAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

或使用addFlags它做同样的事情

public Intent addFlags(int flags) {
    mFlags |= flags;
    return this;
}
Run Code Online (Sandbox Code Playgroud)