2011-09-05 72 views
0

我希望我的应用程序的用户能够发送电子邮件,然后返回到我的应用程序。Intent.ACTION_SEND是一个有效的startActivityForResult()的intent协议吗?

我实现了这个功能类似下面

Intent emailIntent = new Intent(Intent.ACTION_SEND);   
emailIntent.setType("text/plain"); 
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"}); 
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感觉的执行情况,并能正常工作,至少选择Gmail应用程序时。

我的问题是在文档中本节startActivityForResult() “注意,此方法只应与被定义为返回一个结果意向协议来使用。在其他协议(如ACTION_MAIN或ACTION_VIEW),你可能例如,如果您正在启动的活动使用singleTask启动模式,它将不会在您的任务中运行,因此您将立即收到取消结果。“

我已经搜索了意图协议的列表,这些协议是用来从startActivityForResult()中使用的,但没有找到任何协议。

有没有这样的清单?

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

感谢

/马蒂亚斯

回答

1

这是OK(你不会得到任何错误)来做到这一点。但是,您将不会收到onActivityResult中的任何相关结果,因此您应该致电startActivity()

该平台不强制执行任何关于哪些意图操作应该或不应该与startActivityForResult一起使用的规则。该文档只是建议,你应该只使用这种方法与文件意图返回的东西。

如果您依靠onActivityResult()来确定其他活动何时完成并且您的活动已恢复,那是不正确的。改用onResume()即可。