我正在尝试从我的应用程序中打开电子邮件应用程序并收到错误。
Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.
问题是,我设置了FLAG_ACTIVITY_NEW_TASK。 我也尝试过 addFlags
这是我的代码:
private void mailTo(String mail) {
Intent i = new Intent(Intent.ACTION_SEND).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{mail});
try {
context.startActivity(Intent.createChooser(i, ""));
} catch (ActivityNotFoundException ex) {
Toast.makeText(context, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}
我必须注意到,在同一个班级,我有更多有效的意图行动。
private void callTo(String number) {
Intent callIntent = new Intent(Intent.ACTION_CALL).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
callIntent.setData(Uri.parse("tel:" + number));
context.startActivity(callIntent);
}
并
private void smsTo(String phoneNumber) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
答案 0 :(得分:1)
您是否尝试过调用startActivity()
而没有从context()
对象中获取它? context()
具有应用程序的当前状态,因此您可能无法确定启动意图的位置。所以它会是:
startActivity(Intent.createChooser(i, ""));
然后,删除标志
Intent i = new Intent(Intent.ACTION_SEND);
修改强>
由于您从intent()
Activity()
调用MainActivity()
,请尝试将context()
参数传递给您班级的构造函数。
Context context;
public MyAdapaterClass(Context context) {
this.context=context;
}
然后像这样发起intent()
:
Intent i = new Intent(context, MainActivity.class);
答案 1 :(得分:0)
有人告诉我 Intent.createChooser 没有处理标志。
所以我需要跟随 Intent tmp = Intent.createChooser ... 并在tmp上重新设置标志。
我已取代:
context.startActivity(Intent.createChooser(i, ""));
要强>
Intent tmp = Intent.createChooser(i, "").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(tmp);
已删除:
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);