【问题标题】:Context wants FLAG_ACTIVITY_NEW_TASK but I've already set that flag上下文需要 FLAG_ACTIVITY_NEW_TASK 但我已经设置了该标志
【发布时间】:2013-01-25 20:02:45
【问题描述】:

我为我工作的公司创建了一个通用的可重用类,以创建一些通用的界面元素。

该类在构造中采用单个参数:应用程序上下文。

其中一种方法,ContentClickableRowWithIcon 允许您传入意图用作点击操作。

这里是完整的方法声明:

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, Intent i, final Boolean chooser)

onClickEvent 中使用最后一个属性来确定是调用选择器还是直接进入意图。

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, Intent i, final Boolean chooser) {

    LinearLayout ll = new LinearLayout(mContext);

    // ..  LinerLayout construction, has nothing to do with the action

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this is apparently getting ignored... (ps: i've tried i.setFlags as well)

    final Intent intent = i;

    ll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

            if(chooser)
                mContext.startActivity(Intent.createChooser(intent, "Complete With...")); // crashes here with: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
            else
                mContext.startActivity(intent); // this works fine

        }
    });

    return ll;
}

正如 cmets 中所述,只要我不提供使用选择器的功能,一切正常(此列表中的所有内容都会获得一个新的活动标志,我很清楚这一点,并会在解决此问题时进行清理)

我这样做的那一刻,抛出异常: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我的想法已经用完了......

/// EDIT:: 值得注意的是,在调试时,Intent 中的 flags 属性使用 addFlags 设置为 268435456,使用 setFlags 设置为 268435456,当它到达在 onClick 操作中使用 Intent 的时间时

【问题讨论】:

  • 你试过mContext.startActivity(Intent.createChooser(i, "Complete With...")); 吗?
  • 我的猜测是 createChooser() 返回的新 Intent 没有设置 FLAG_ACTIVITY_NEW_TASK。尝试获取意图,设置标志,然后调用 startActivity
  • 除了我需要最终确定之外?当我这样做时(在参数final Intent i 中设置,标志永远不会设置,调试中的标志 = 0
  • 刚刚这样做:if(chooser) { Intent intent = i; intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(Intent.createChooser(intent, "Complete With...")); } in leu,仍然崩溃:\
  • 试试这个:Intent newIntent = Intent.createChooser(intent, "Complete With..."); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(newIntent);

标签: java android android-intent android-sdk-2.3


【解决方案1】:

问题已解决,我认为这只是“操作顺序”场景的情况

这就是让这件事起作用的原因:

    ll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {



            if(chooser) {
                Intent intent = Intent.createChooser(i, "Complete With");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(intent);
            } else
                mContext.startActivity(i);

        }
    });

还在方法声明的参数中添加了“final”修饰符

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, final Intent i, final Boolean chooser)

【讨论】:

  • 不是“操作顺序”,而是 createChooser 返回一个新 Intent 的事实。您在原始意图中设置的标志不会自动复制到新的。
  • +10(好吧,如果我可以的话)。我一直在把头发拉出来。突破在于理解实际上涉及两个意图。我将 FLAG_ACTIVITY_NEW_TASK 设置为错误的意图。
  • 我也有同样的问题。很高兴知道“两个意图”的东西。哈哈
  • 对此的任何帮助:stackoverflow.com/questions/37071016/… 将不胜感激。谢谢。
  • 哦,我需要在意图而不是上下文上设置标志,正如错误消息所暗示的那样。很高兴知道..
【解决方案2】:

实际上,您的异常意味着您使用的是 Not Activity Context。它可以从应用程序上下文中调用。检查您是否在 Activity 上下文中,因为这不是服务

【讨论】:

    【解决方案3】:

    我修复了它,将标志添加到选择器意图

    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND)
                .setType("text/plain")
                .putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here")
                .putExtra(android.content.Intent.EXTRA_TEXT, url)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
    context.startActivity(Intent.createChooser(sharingIntent, "Share with").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      相关资源
      最近更新 更多