Android 在listview适配器中从我的应用打开电子邮件应用

Android 在listview适配器中从我的应用打开电子邮件应用,android,listview,android-intent,Android,Listview,Android Intent,我试图从我的应用程序打开电子邮件应用程序,但出现错误 Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. 问题是,我设置了FLAG\u ACTIVITY\u NEW\u TASK。 我还尝试添加标志 context.startActivity(Intent.createChooser(i, "")); 这是我的代码: private vo

我试图从我的应用程序打开电子邮件应用程序,但出现错误

Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag.
问题是,我设置了FLAG\u ACTIVITY\u NEW\u TASK。 我还尝试添加标志

context.startActivity(Intent.createChooser(i, ""));
这是我的代码:

 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 smsTo(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}
Intent tmp = Intent.createChooser(i, "").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(tmp);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
我必须注意,在同一个班级中,我有更多的工作意图动作。

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 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 smsTo(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}
Intent tmp = Intent.createChooser(i, "").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(tmp);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

您是否尝试过调用
startActivity()
,而没有从
context()
对象获取它
context()
具有应用程序的当前状态,因此您可能无法确定从何处开始意图。因此,这将是:

startActivity(Intent.createChooser(i, ""));
这样,就可以移除旗帜了

Intent i = new Intent(Intent.ACTION_SEND);
编辑

由于您是从非
MainActivity()
Activity()
调用
intent()
,请尝试将
context()
参数传递给类的构造函数

Context context;

public MyAdapaterClass(Context context) {
this.context=context;
}
然后启动
intent()
,如下所示:

Intent i = new Intent(context, MainActivity.class);

有人告诉我,意图。createChooser没有处理这些标志

因此我需要遵循Intent tmp=Intent.createChooser…并在tmp上重新设置标志

我替换了:

context.startActivity(Intent.createChooser(i, ""));
至:

 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 smsTo(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}
Intent tmp = Intent.createChooser(i, "").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(tmp);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
并删除:

 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 smsTo(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + phoneNumber)).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}
Intent tmp = Intent.createChooser(i, "").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(tmp);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

我不明白你的答案。这个类从BaseAdapter扩展而来,因此我从父类获取上下文。不知怎的,我知道您是从MainActivity类调用Intent的,我将发布我的更改。正如我所说,我已经从perent获取了上下文。关于意图的例子,这不是我需要的。在我看到你的帖子之前,我在其他地方找到了答案,