能否检测到ACTION_SEND意图是否成功?

5

我有一个简单的Android应用程序,代码如下(来自Android文档):

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

但是我找不到一种方法来检测电子邮件是否成功发送(或用户取消了发送)。有没有一种方法可以读取意图响应?
2个回答

7

有没有一种方法可以读取意图响应?

不能从任意活动读取任意操作的响应。

Intent 操作的文档将告诉您是否有预期输出。因此,例如,ACTION_GET_CONTENT 的输出已经记录。对于这些 Intent 操作,您可以使用 startActivityForResult(),其中一部分输出将是“结果代码”,以便让您大致了解结果如何。

然而:

  • 并非每个 Intent 操作都有输出文档。特别是,ACTION_SEND 未记录有输出。在这种情况下,您不需要使用 startActivityForResult() (而是使用 startActivity())。即使您使用 startActivityForResult(),您也无法知道负面结果意味着用户取消了还是其他活动仅遵循文档并未返回结果。

  • 某些活动存在漏洞,在应该返回结果时未能返回结果。

  • 您对成功结果的定义和活动对成功结果的定义可能不同。


1
考虑到这在iOS上是一个简单且有良好文档支持的功能,我很遗憾不得不选择这个作为正确答案。 - Jason Sperske
我也遇到了类似的情况,由于缺乏准确的返回状态,我无法执行操作。我将搜索AOSP的错误跟踪器,看看是否有其他人报告了这个问题,如果有足够多的人提出要求,我希望Google可以更新API。 - Anil Gorthy

3

我认为没有确定的方法可以完成它。

您可以使用 startActivityForResut() 来启动发送操作,并希望处理意图的活动以 RESULT_OK 回复。但是您不能总是依赖它能正常工作。

然后您可以检查

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        Toast.makeText(this,"Successfully Sharing", Toast.LENGTH_SHORT).show();

    }
}

那可能正是我正在寻找的。 - Jason Sperske
3
这个大概不会与任何应用程序兼容,因为ACTION_SEND没有被记录返回结果。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接