【问题标题】:Open email app from my app in listview Adapter [duplicate]在 listview 适配器中从我的应用程序打开电子邮件应用程序 [重复]
【发布时间】:2017-01-13 01:07:29
【问题描述】:

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

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

我必须注意,在同一个课程中,我有更多有效的 Intent Actions。

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

【问题讨论】:

  • 在我看到你的帖子之前,我在其他地方找到了答案,

标签: android listview android-intent


【解决方案1】:

您是否尝试过调用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);

【讨论】:

  • 我不明白你的回答。此类从 BaseAdapter 扩展而来,因此我从父级获取上下文。
  • 不知何故我明白你是从 MainActivity 类调用 Intent,我会发布我的更改。
  • 正如我所说,我已经从相关人员那里得到了上下文。关于意图示例,这不是我需要的。我需要 Intent.ACTION_SEND 的 Intent。
【解决方案2】:

有人告诉我 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2012-07-30
    • 2013-08-30
    • 2010-12-20
    相关资源
    最近更新 更多