在我的appview适配器中打开电子邮件应用

时间:2016-09-05 16:14:36

标签: android listview android-intent

我正在尝试从我的应用程序中打开电子邮件应用程序并收到错误。

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);
}

2 个答案:

答案 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);