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

问题描述 投票:2回答:3

我正在尝试在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?
android android-intent android-activity broadcastreceiver flags
3个回答
3
投票

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;
}

2
投票

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

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

setFlags()设置要使用的完整标志集,因此您必须在此处使用|所有标志。 addFlags()可以多次调用,并为你做|标志。


0
投票

用kotlin和anko做这件事的简单方法见片段see example snapshot

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

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.