上下文需要FLAG_ACTIVITY_NEW_TASK,但我已经设置了该标志

时间:2013-01-25 20:02:45

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

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

该类接受构造中的单个参数:应用程序上下文。

其中一种方法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;
}

正如评论中所提到的,任何时候我都不提供使用选择器的能力,一切正常(此列表中的所有内容都会获得一个新的活动标记,我很清楚这一点,并且会在找到此问题时进行清理)< / p>

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

我已经没有想法......

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

3 个答案:

答案 0 :(得分:25)

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

是什么让这件事能够发挥作用:

    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)

答案 1 :(得分:1)

实际上,您的异常意味着您正在使用非活动上下文。它可以从Application上下文中调用。检查您是否处于活动上下文中,因为这不是服务

答案 2 :(得分:0)

我修复了将标志添加到选择器意图中的问题

12/12/2020 (10 chars)
2/12/2020 (9 chars)
12/2/2020 (9 chars)
2/2/2020 (8 chars)