对于某些应用,需要为其添加一个“分享”功能菜单,如通过Email或蓝牙分享给别人。 此时可以直接调用系统内置的服务,而不需要自己实现。 且看测试程序截图(将一指定文件通过蓝牙或Email分享给别人): 布局main.xml就一个button,代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:text="Test Email" android:id="@+id/btnEmail" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 然后就是程序代码EmailTest.java: package com.ucrobotics.emailtest; import android.app.Activity; import android.content.Intent; import android.net.Uri;import android.os.Bundle; import android.view.View; import android.widget.Button; public class EmailTest extends Activity { private Button btnEmail = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnEmail = (Button) this.findViewById(R.id.btnEmail); btnEmail.setOnClickListener(new ClickEvent()); } class ClickEvent implements View.OnClickListener { public void onClick(View v) { Intent it = new Intent(Intent.ACTION_SEND); //it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); //it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/sprt.txt[/url]"); it.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/test.jpg")); //it.setType("plain/text"); it.setType("text/html"); startActivity(Intent.createChooser(it, "选择分享方式")); } }} 主要就是调用系统的Intent.ACTION_SEND服务。虽然设置的是"text/html"类型,但发送文件或是图片都是可以的。然后选择不同的客户端就会调用各自的服务进行文件发送操作。 关于选取不同的intent和type会有如下测试结论: Intent.ACTION_SEND + plain/text ---> 列表里仅有Gmail和系统默认Email两个客户端 Intent.ACTION_SEND + text/html ---> 除了两个email客户端,还有蓝牙客户端 Intent.ACTION_SEND_MULTIPLE + * ---> 此时会显示两个email客户端和短信服务 Intent.ACTION_SENDTO + * ---> 没有应用显示 由于都是调用系统自带的服务,所以无需在manifest.xml里添加权限之类的设置及<activity>声明! ================ 还有其它相关的Intent调用:(未测试) 1,调web浏览器 uri mybloguri = uri.parse("kuikui.javaeye.com") returnit = new intent(intent.action_view, mybloguri); 2,地图 uri mapuri = uri.parse("geo:38.899533,-77.03676"); returnit = new intent(intent.action_view, mapuri); 3,调拨打电话界 uri teluri = uri.parse("tel:100861"); returnit = new intent(intent.action_dial, teluri); 4,直接拨打电话 uri calluri = uri.parse("tel:100861"); returnit = new intent(intent.action_call, calluri); 5,卸载 uri uninstalluri = uri.fromparts("package", "xxx", null); returnit = new intent(intent.action_delete, uninstalluri); 6,安装 uri installuri = uri.fromparts("package", "xxx", null); returnit = new intent(intent.action_package_added, installuri); 7,播放 uri playuri = uri.parse("file:///sdcard/download/everything.mp3"); returnit = new intent(intent.action_view, playuri); 8,调用发邮件 uri emailuri = uri.parse("mailto:shenrenkui@gmail.com"); returnit = new intent(intent.action_sendto, emailuri); 9,发邮件 returnit = new intent(intent.action_send); string[] tos = { "shenrenkui@gmail.com" }; string[] ccs = { "shenrenkui@gmail.com" }; returnit.putextra(intent.extra_email, tos) returnit.putextra(intent.extra_cc, ccs); returnit.putextra(intent.extra_text, "body"); returnit.putextra(intent.extra_subject, "subject"); returnit.settype("message/rfc882") intent.createchooser(returnit, "choose email client"); 10,发短信 uri smsuri = uri.parse("tel:100861"); returnit = new intent(intent.action_view, smsuri); returnit.putextra("sms_body", "shenrenkui"); returnit.settype("vnd.android-dir/mms-sms"); 还可以参见这里:apps.hi.baidu.com/share/detail/33356980 测试发现,如果将上面的: it.setType("text/html"); 改成: it.setType("text/plain"); 就会出现更多的应用选择,如新浪微博,彩信等等。 但因为测试的是.txt文本文件,微博提示说无法识别的格式。 但如果将前面的 Intent.EXTRA_STREAM 改成 Intent.EXTRA_TEXT,则邮件客户端选中后没附件了,蓝牙分享也工作的不正常。