【问题标题】:Multiple Intent flags for starting a new Activity in Android用于在 Android 中启动新 Activity 的多个 Intent 标志
【发布时间】:2015-03-18 16:32:14
【问题描述】:

我正在尝试在 Intent 中添加更多标志,以在 BroadcastReceiver 中启动新 Activity,以响应从应用程序的另一部分发送的特定 Intent。 正如我注意到的那样,我已经在我创建的 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


    【解决方案1】:

    setFlags 只需分配参数,从sn -p 可以看到

    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() 可以多次调用,并为你做标志的|

      【讨论】:

        【解决方案3】:

        使用 kotlin 和 anko 的简单方法参见 sn-p see example snapshot

        startActivity(intentFor().clearTask().newTask().noHistory())

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2014-08-25
          • 2017-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多