Intent.ACTION_SEND是startActivityForResult()的有效意图协议吗?

时间:2011-09-05 09:08:26

标签: android

我希望我的应用的用户能够发送电子邮件然后返回我的应用。

我已实现此功能,如下所示

Intent emailIntent = new Intent(Intent.ACTION_SEND);         
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL  , new String[]{"test@gmail.com"}); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Message subject"); 
emailIntent.putExtra(Intent.EXTRA_TEXT   , "Message text"); 
try { 
    startActivityForResult(Intent.createChooser(emailIntent, "Send mail..."), 42);

} catch (android.content.ActivityNotFoundException ex) { 
    Toast toast = Toast.makeText(getApplicationContext(), "There are no email clients installed.", Toast.LENGTH_SHORT);
    toast.show();
} 

我已经测试了HTC Sensation上的实现,它运行正常,至少在选择Gmail应用时。

我的问题是startActivityForResult()文档中的这一节 “请注意,此方法只应与定义为返回结果的Intent协议一起使用。在其他协议(例如ACTION_MAIN或ACTION_VIEW)中,您可能无法获得预期的结果。例如,如果您要启动的活动使用singleTask启动模式,它不会在您的任务中运行,因此您将立即收到取消结果。“

我搜索了一个意图协议列表,这些协议旨在从startActivityForResult()中使用,但还没有找到任何协议。

有这样的清单吗?

从startActivityForResult()使用Intent.ACTION_SEND可以吗?我可以在所有设备上使用相同的行为吗?

由于

/的Mathias

1 个答案:

答案 0 :(得分:1)

这样做是可以的(你不会得到任何错误)。但是,您不会在onActivityResult中收到任何相关结果,这就是您应该致电startActivity()的原因。

平台不会对startActivityForResult应该或不应该使用哪些意图操作强制执行任何规则。文档只是建议你应该只使用这种方法和记录的意图返回一些内容。

如果您依靠onActivityResult()来确定其他活动何时结束并且您的活动已恢复,那就不正确了。只需使用onResume()代替。