在 listview 适配器中从我的应用程序打开电子邮件应用程序 [重复]

Posted

技术标签:

【中文标题】在 listview 适配器中从我的应用程序打开电子邮件应用程序 [重复]【英文标题】:Open email app from my app in listview Adapter [duplicate] 【发布时间】: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);

【问题讨论】:

在我看到你的帖子之前,我在其他地方找到了答案, 【参考方案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);

【讨论】:

以上是关于在 listview 适配器中从我的应用程序打开电子邮件应用程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在listview onClick()中从POJO获取项目?

在 ListView 的自定义适配器中从 URL 加载图像(Android Studio)

打开应用程序 来电或去电断开后

如何在 IOS 中从我的 React-Native 应用程序打开外部应用程序?

在我的应用程序中从我的 Today Extension(小部件)打开 Safari

我需要从后台线程访问listview的适配器