繁体   English   中英

用于在Android中启动新活动的多个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?

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进行此操作的简单方法,请参见摘要,请参见示例快照

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

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM