Java 上下文需要标记“活动”和“新任务”,但我&x27;我已经设置了那个标志
我已经为我工作的公司创建了一个通用的可重用类来创建一些通用接口元素 该类接受单个参数,如构造中的参数:应用程序上下文 其中一种方法,Java 上下文需要标记“活动”和“新任务”,但我&x27;我已经设置了那个标志,java,android,android-intent,android-sdk-2.3,Java,Android,Android Intent,Android Sdk 2.3,我已经为我工作的公司创建了一个通用的可重用类来创建一些通用接口元素 该类接受单个参数,如构造中的参数:应用程序上下文 其中一种方法,ContentClickableRowWithIcon允许您传入用作单击操作的意图 以下是完整的方法声明: public linear布局内容ClickableRowWithIcon(可绘制图标、字符串标题、意图i、最终布尔选择器) onClickEvent中使用最后一个属性来确定是调用选择器还是直接进入意图 public LinearLayout ContentC
ContentClickableRowWithIcon
允许您传入用作单击操作的意图
以下是完整的方法声明:
public linear布局内容ClickableRowWithIcon(可绘制图标、字符串标题、意图i、最终布尔选择器)
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;
}
正如在评论中提到的,只要我不提供使用选择器的功能,一切都可以正常工作(此列表中的所有内容都有一个新的活动标志,我很清楚这一点,并且在解决此问题时将进行清理)
当我这样做时,抛出异常:
android.util.AndroidRuntimeException:从活动上下文外部调用startActivity()需要标志“活动”新任务标志。这真的是你想要的吗?
我已经没有主意了
///编辑::值得注意的是,在调试时,Intent中的flags属性通过addFlags设置为
268435456
,通过setFlags设置为268435456
,当达到在onClick操作中使用Intent的时间时,问题得到了解决,我认为这只是“操作顺序”场景的情况
以下是让这件事起作用的原因:
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)
实际上,您的异常意味着您使用的不是活动上下文。可以从应用程序上下文调用它。检查您是否处于活动上下文中,因为这不是一项服务我已修复了它,将标志添加到选择器意图中
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));
你试过
mContext.startActivity(Intent.createChooser(i,“完成…”)了吗代码>?我猜createChooser()返回的新意图没有设置标志“活动”和“新建”任务。试着获得目的,设置标志,然后打电话给startActivityaside,因为我无论如何都需要最终决定?当我这样做(在参数final Intent I
中设置)时,根本不会设置标志,调试中的标志=0只是这样做:if(chooser){Intent Intent Intent=I;Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(Intent.createChooser(Intent,“completed With…”);}
在leu中,仍然崩溃:\t尝试以下操作:Intent newIntent=Intent.createChooser(Intent,“完成…”);newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(newIntent);
不是“操作顺序”确实如此,但是createChooser返回了一个新的意图。您在原始意图中设置的标志不会自动复制到新的意图中。+10(好吧,如果我可以的话).我一直在为这件事大惊小怪。突破点在于理解实际上有两个意图。我把FLAG_ACTIVITY_NEW_TASK设置为错误的意图。我有完全相同的问题。很高兴知道“两个意图”东西。哈哈,任何帮助:将不胜感激。谢谢。哦,我需要设置的是意图而不是上下文标志,正如错误消息所建议的。很高兴知道。。