android 中 intent 是经常要用到的。不管是页面牵转,还是传递数据,或是调用外部程序,系统功能都要用到 intent。
1.从 google 搜索内容
Intent intent = new Intent();intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);
2.浏览网页
Uri uri = Uri.parse("http://www.google.com");Intent it = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);
3.显示地图
Uri uri = Uri.parse("geo:38.899533,-77.036476");Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);
4.路径规划
Uri uri = Uri.parse("http://maps.google.com/maps?f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity(it);
5.拨打电话
Uri uri = Uri.parse("tel:xxxxxx");Intent it = new Intent(Intent.ACTION_DIAL, uri);
startActivity(it);
6.调用发短信的程序
Intent it = new Intent(Intent.ACTION_VIEW);it.putExtra("sms_body", "The SMS text");
it.setType("vnd.android-dir/mms-sms");
startActivity(it);
7.发送短信
Uri uri = Uri.parse("smsto:0800000123");Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body", "The SMS text");
startActivity(it);
String body="this is sms demo";
Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", number, null));
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);
startActivity(mmsintent);
8.发送彩信
Uri uri = Uri.parse("content://media/external/images/media/23");Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra("sms_body", "some text");
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType("image/png");
startActivity(it);
StringBuilder sb = new StringBuilder();
sb.append("file://");
sb.append(fd.getAbsoluteFile());
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto", number, null));
// Below extra datas are all optional.
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT, subject);
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI, sb.toString());
intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, composeMode);
intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, exitOnSent);
startActivity(intent);
9.发送 Email
Uri uri = Uri.parse("mailto:xxx@abc.com");Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
it.putExtra(Intent.EXTRA_TEXT, "The email body text");
it.setType("text/plain");
startActivity(Intent.createChooser(it, "Choose Email Client"));
Intent it=new Intent(Intent.ACTION_SEND);
String[] tos={"me@abc.com"};
String[] ccs={"you@abc.com"};
it.putExtra(Intent.EXTRA_EMAIL, tos);
it.putExtra(Intent.EXTRA_CC, ccs);
it.putExtra(Intent.EXTRA_TEXT, "The email body text");
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.setType("message/rfc822");
startActivity(Intent.createChooser(it, "Choose Email Client"));
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));
10.播放多媒体
Intent it = new Intent(Intent.ACTION_VIEW);Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
11.uninstall apk
Uri uri = Uri.fromParts("package", strPackageName, null);Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
12.install apk
Uri installUri = Uri.fromParts("package", "xxx", null);returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
13. 打开照相机
<1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);this.sendBroadcast(i);
<2>long dateTaken = System.currentTimeMillis();
String name = createName(dateTaken) + ".jpg";
fileName = folder + name;
ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, fileName);
values.put("_data", fileName);
values.put(Images.Media.PICASA_ID, fileName);
values.put(Images.Media.DISPLAY_NAME, fileName);
values.put(Images.Media.DESCRIPTION, fileName);
values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);
Uri photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(inttPhoto, 10);
14.从 gallery 选取图片
Intent i = new Intent();i.setType("image/*");
i.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(i, 11);
15. 打开录音机
Intent mi = new Intent(Media.RECORD_SOUND_ACTION);startActivity(mi);
16.显示应用详细列表
Uri uri = Uri.parse("market://details?id=app_id");Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where app_id is the application ID, find the ID
//by clicking on your application on Market home
//page, and notice the ID from the address bar
刚才找 app id 未果,结果发现用 package name 也可以
Uri uri = Uri.parse("market://details?id=<packagename>");
这个简单多了
17 寻找应用
Uri uri = Uri.parse("market://search?q=pname:pkg_name");Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where pkg_name is the full package path for an application
18 打开联系人列表
<1>Intent i = new Intent();
i.setAction(Intent.ACTION_GET_CONTENT);
i.setType("vnd.android.cursor.item/phone");
startActivityForResult(i, REQUEST_TEXT);
<2>
Uri uri = Uri.parse("content://contacts/people");
Intent it = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(it, REQUEST_TEXT);
19 打开另一程序
Intent i = new Intent();ComponentName cn = new ComponentName("com.yellowbook.android2",
"com.yellowbook.android2.AndroidSearch");
i.setComponent(cn);
i.setAction("android.intent.action.MAIN");
startActivityForResult(i, RESULT_OK);
20.调用系统编辑添加联系人(高版本 SDK 有效):
Intent it = new Intent(Intent.ACTION_INSERT_OR_EDIT);it.setType("vnd.android.cursor.item/contact");
// it.setType(Contacts.CONTENT_ITEM_TYPE);
it.putExtra("name", "myName");
it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY, "organization");
it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL, "email");
it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");
it.putExtra( android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,
"mobilePhone");
it.putExtra( android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,
"workPhone");
it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");
startActivity(it);
21.调用系统编辑添加联系人(全有效):
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);intent.setType(People.CONTENT_ITEM_TYPE);
intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,
Contacts.PhonesColumns.TYPE_MOBILE);
intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com");
intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE,
Contacts.ContactMethodsColumns.TYPE_WORK);
startActivity(intent);
22(更新)
//直接打电话出去Uri uri = Uri.parse("tel:0800000123");
Intent it = new Intent(Intent.ACTION_CALL, uri);
startActivity(it);
//用這個,要在 AndroidManifest.xml 中,加上
//<uses-permission id="android.permission.CALL_PHONE" />
23.最基本的 share 信息的 intent,可以传一段 text 信息到各个手机上已安装程序:如
SMS,Email,sina 微波,米聊,facebook,twitter 等等Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_TEXT, "The email subject text");
it.setType("text/plain");
startActivity(Intent.createChooser(it, "Choose Email Client"));
24.调用 skype 的 intent
方法 1:老版,新版不可用,可能是因为 skype 的 activity 结构变动://
Intent sky = new Intent("android.intent.action.CALL_PRIVILEGED");
sky.setClassName("com.skype.raider",
"com.skype.raider.contactsync.ContactSkypeOutCallStartActivity");
sky.setData(Uri.parse("tel:" + phone));
startActivity(sky);
方法 2:打开到 skype 的 main page:
//
PackageManager packageManager = getActivity().getPackageManager();
Intent skype = packageManager.getLaunchIntentForPackage("com.skype.raider");
skype.setData(Uri.parse("tel:65465446"));
startActivity(skype);
方法 3:传入号码,直接进入 skype 拨号画面并打电话:
Intent intent = new Intent("android.intent.action.CALL_PRIVILEGED");
intent.setClassName("com.skype.raider",
"com.skype.raider.Main");
intent.setData(Uri.parse("tel:" + phone));
startActivity(intent);
一些常用的Intent:
Uri | Action | 功能 | 备注 |
---|---|---|---|
geo:latitude,longitude | Intent.ACTION_VIEW | 打开地图应用程序并显示指定的经纬度 | |
geo:0,0?q=street+address | Intent.ACTION_VIEW | 打开地图应用程序并显示指定的地址 | |
http://web_address | Intent.ACTION_VIEW | 打开浏览器程序并显示指定的URL | |
https://web_address | Intent.ACTION_VIEW | 打开浏览器程序并显示指定的URL | |
tel:phone_number | Intent.ACTION_CALL | 打开电话应用程序并拨打指定的电话号码 | |
tel:phone_number | Intent.ACTION_DIAL | 打开电话应用程序并拨下指定的电话号码 | |
voicemail: | Intent.ACTION_DIAL | 打开电话应用程序并拨下指定语音邮箱的电话号码 | |
plain_text | Intent.ACTION_WEB_SEARCH | 打开浏览器程序并使用Google搜索引擎搜索 |
活动:
Intent | 说明 | Action |
---|---|---|
CALL_ACTION | 拨打电话,被呼叫的联系人在数据中指定。 | android.intent.action.CALL |
EMERGENCY_DIAL_ACTION | 拨打紧急电话号码。 | android.intent.action.EMERGENCY_DIAL |
DIAL_ACTION | 拨打数据中指定的电话号码。 | android.intent.action.DIAL |
ANSWER_ACTION | 处理拨入的电话。 | android.intent.action.ANSWER |
DELETE_ACTION | 从容器中删除给定的数据。 | android.intent.action.DELETE |
PICK_ACTION | 从数据中选择一个项目 (item),将被选中的项目返回。 | android.intent.action.PICK |
DEFAULT_ACTION | 和 VIEW_ACTION 相同,是在数据上执行的标准动作。 | android.intent.action.VIEW |
LOGIN_ACTION | 获取登录凭证。 | android.intent.action.LOGIN |
ALL_APPS_ACTION | 列举所有可用的应用。 | android.intent.action.ALL_APPS |
CLEAR_CREDENTIALS_ACTION | 清除登陆凭证 (credential)。 | android.intent.action.CLEAR_CREDENTIALS |
GET_CONTENT_ACTION | 让用户选择数据并返回。 | android.intent.action.GET_CONTENT |
EDIT_ACTION | 为制定的数据显示可编辑界面。 | android.intent.action.EDIT |
BUG_REPORT_ACTION | 显示 activity 报告错误。 | android.intent.action.BUG_REPORT |
SETTINGS_ACTION | 显示系统设置。输入:无。 | android.intent.action.SETTINGS |
WALLPAPER_SETTINGS_ACTION | 显示选择墙纸的设置界面。输入:无。 | android.intent.action.WALLPAPER_SETTINGS |
SENDTO_ACTION | 向 data 指定的接收者发送一个消息。 | android.intent.action.SENDTO |
VIEW_ACTION | 向用户显示数据。 | android.intent.action.VIEW |
PICK_ACTIVITY_ACTION | 选择一个 activity,返回被选择的 activity 的类(名)。 | android.intent.action.PICK_ACTIVITY |
RUN_ACTION | 运行数据(指定的应用),无论它(应用)是什么。 | android.intent.action.RUN |
INSERT_ACTION | 在容器中插入一个空项 (item)。 | android.intent.action.INSERT |
ADD_SHORTCUT_ACTION | 在系统中添加一个快捷方式。. | android.intent.action.ADD_SHORTCUT |
WEB_SEARCH_ACTION | 执行 web 搜索。 | android.intent.action.WEB_SEARCH |
SYNC_ACTION | 执行数据同步。 | android.intent.action.SYNC |
MAIN_ACTION | 作为主入口点启动,不需要数据。 | android.intent.action.MAI |
Intent | 说明 | Action |
---|---|---|
LABEL_EXTRA | 大写字母开头的字符标签,和 ADD_SHORTCUT_ACTION 一起使用。 | android.intent.extra.LABEL |
INTENT_EXTRA | 和 PICK_ACTIVITY_ACTION 一起使用时,说明用户选择的用来显示的 activity;和 ADD_SHORTCUT_ACTION 一起使用的时候,描述要添加的快捷方式。 | android.intent.extra.INTENT |
TEMPLATE_EXTRA | 新记录的初始化模板。 | android.intent.extra.TEMPLATE |
Intent | 说明 | Action |
---|---|---|
XMPP_DISCONNECTED_ACTION | XMPP 连接已经被断开。 | android.intent.action.XMPP_DI |
XMPP_CONNECTED_ACTION | XMPP 连接已经被建立。 | android.intent.action.XMPP_CONNECTED |
BATTERY_CHANGED_ACTION | 充电状态,或者电池的电量发生变化。 | android.intent.action.BATTERY_CHANGED |
TIME_TICK_ACTION | 当前时间已经变化(正常的时间流逝)。 | android.intent.action.TIME_TICK |
DATA_ACTIVITY_STATE_CHANGED_ACTION | 电话的数据活动(data activity)状态(即收发数据的状态)已经改变。 | android.intent.action.DATA_ACTIVITY |
DATA_CONNECTION_STATE_CHANGED_ACTION | 电话的数据连接状态已经改变。 | android.intent.action.DATA_STATE |
MESSAGE_WAITING_STATE_CHANGED_ACTION | 电话的消息等待(语音邮件)状态已经改变。 | android.intent.action.MWI |
SIGNAL_STRENGTH_CHANGED_ACTION | 电话的信号强度已经改变。 | android.intent.action.SIG_STR |
SERVICE_STATE_CHANGED_ACTION | 电话服务的状态已经改变。 | android.intent.action.SERVICE_STATE |
PHONE_STATE_CHANGED_ACTION | 电话状态已经改变。 | android.intent.action.PHONE_STATE |
PROVIDER_CHANGED_ACTION | 更新将要(真正)被安装。 | android.intent.action.PROVIDER_CHANGED |
FOTA_INSTALL_ACTION | 更新已经被确认,马上就要开始安装。 | android.server.checkin.FOTA_INSTALL |
FOTA_READY_ACTION | 更新已经被下载,可以开始安装。 | android.server.checkin.FOTA_READY |
FOTA_RESTART_ACTION | 恢复已经停止的更新下载。 | android.server.checkin.FOTA_RESTART |
MEDIA_SCANNER_STARTED_ACTION | 开始扫描介质的一个目录。 | android.intent.action.MEDIA_SCANNER_STARTED |
MEDIA_BAD_REMOVAL_ACTION | 扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)。 | android.intent.action.MEDIA_BAD_REMOVAL |
MEDIA_MOUNTED_ACTION | 扩展介质被插入,而且已经被挂载。 | android.intent.action.MEDIA_MOUNTED |
MEDIA_REMOVED_ACTION | 扩展介质被移除。 | android.intent.action.MEDIA_REMOVED |
MEDIA_UNMOUNTED_ACTION | 扩展介质存在,但是还没有被挂载 (mount)。 | android.intent.action.MEDIA_UNMOUNTED |
MEDIA_SHARED_ACTION | 扩展介质的挂载被解除 (unmount),因为它已经作为 USB 大容量存储被共享。 | android.intent.action.MEDIA_SHARED |
SCREEN_OFF_ACTION | 屏幕被关闭。 | android.intent.action.SCREEN_OFF |
SCREEN_ON_ACTION | 屏幕已经被打开。 | android.intent.action.SCREEN_ON |
FOTA_CANCEL_ACTION | 取消所有被挂起的 (pending) 更新下载。 | android.server.checkin.FOTA_CANCEL |
DATE_CHANGED_ACTION | 日期被改变。 | android.intent.action.DATE_CHANGED |
UMS_DISCONNECTED_ACTION | 设备从 USB 大容量存储模式退出。 | android.intent.action.UMS_DISCONNECTED |
CONFIGURATION_CHANGED_ACTION | 设备的配置信息已经改变,参见 Resources.Configuration. | android.intent.action.CONFIGURATION_CHANGED |
UMS_CONNECTED_ACTION | 设备进入 USB 大容量存储模式。 | android.intent.action.UMS_CONNECTED |
PACKAGE_REMOVED_ACTION | 设备上删除了一个应用程序包。 | android.intent.action.PACKAGE_REMOVED |
PACKAGE_ADDED_ACTION | 设备上新安装了一个应用程序包。 | android.intent.action.PACKAGE_ADDED |
NETWORK_TICKLE_RECEIVED_ACTION | 设备收到了新的网络 “tickle” 通知。 | android.intent.action.NETWORK_TICKLE_RECEIVED |
TIME_CHANGED_ACTION | 时间已经改变(重新设置)。 | android.intent.action.TIME_SET |
TIMEZONE_CHANGED_ACTION | 时区已经改变。 | android.intent.action.TIMEZONE_CHANGED |
FOTA_UPDATE_ACTION | 通过 OTA 下载并安装操作系统更新。 | android.server.checkin.FOTA_UPDATE |
STATISTICS_STATE_CHANGED_ACTION | 统计信息服务的状态已经改变。 | android.intent.action.STATISTICS_STATE_CHANGED |
WALLPAPER_CHANGED_ACTION | 系统的墙纸已经改变。 | android.intent.action.WALLPAPER_CHANGED |
PROVISIONING_CHECK_ACTION | 要求 polling of provisioning service 下载最新的设置。 | android.intent.action.PROVISIONING_CHECK |
STATISTICS_REPORT_ACTION | 要求 receivers 报告自己的统计信息。 | android.intent.action.STATISTICS_REPORT |
MEDIA_SCANNER_FINISHED_ACTION | 已经扫描完介质的一个目录。 | android.intent.action.MEDIA_SCANNER_FINISHED |
MEDIABUTTON_ACTION | 用户按下了“Media Button”。 | android.intent.action.MEDIABUTTON |
MEDIA_EJECT_ACTION | 用户想要移除扩展介质(拔掉扩展卡)。 | android.intent.action.MEDIA_EJECT |
CALL_FORWARDING_STATE_CHANGED_ACTION | 语音电话的呼叫转移状态已经改变。 | android.intent.action.CFF |
BOOT_COMPLETED_ACTION | 在系统启动后,这个动作被广播一次(只有一次)。 | android.intent.action.BOOT_COMPLETED |
Intent | 说明 | Action |
---|---|---|
LAUNCHER_CATEGORY | Activity 应该被显示在顶级的 launcher 中。 | android.intent.category.LAUNCHER |
PREFERENCE_CATEGORY | activity是一个设置面板 (preference panel)。 | android.intent.category.PREFERENCE |
SAMPLE_CODE_CATEGORY | To be used as an sample code example (not part of the normal user experience). | android.intent.category.SAMPLE_CODE |
FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY | To be used as code under test for framework instrumentation tests. | android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST |
SELECTED_ALTERNATIVE_CATEGORY | 对于被用户选中的数据,activity 是它的一个可选操作。 | android.intent.category.SELECTED_ALTERNATIVE |
BROWSABLE_CATEGORY | 能够被浏览器安全使用的 activities 必须支持这个类别。 | android.intent.category.BROWSABLE |
EMBED_CATEGORY | 能够在上级(父)activity 中运行。 | android.intent.category.EMBED |
DEFAULT_CATEGORY | 如果 activity 是对数据执行确省动作(点击, center press)的一个选项,需要设置这个类别。 | android.intent.category.DEFAULT |
DEVELOPMENT_PREFERENCE_CATEGORY | 说明 activity 是一个设置面板 (development preference panel). | android.intent.category.DEVELOPMENT_PREFERENCE |
ALTERNATIVE_CATEGORY | 说明 activity 是用户正在浏览的数据的一个可选操作。 | android.intent.category.ALTERNATIVE |
UNIT_TEST_CATEGORY | 应该被用作单元测试(通过 test harness 运行)。 | android.intent.category.UNIT_TEST |
GADGET_CATEGORY | 这个 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)。 | android.intent.category.GADGET |
WALLPAPER_CATEGORY | 这个 activity 能过为设备设置墙纸。 | android.intent.category.WALLPAPER |
TAB_CATEGORY | 这个 activity 应该在 TabActivity 中作为一个 tab 使用。 | android.intent.category.TAB |
HOME_CATEGORY | 主屏幕 (activity),设备启动后显示的第一个 activity。 | android.intent.category.HOME |
TEST_CATEGORY | 作为测试目的使用,不是正常的用户体验的一部分。 | android.intent.category.TEST |
标志 | 描述 | 值 |
---|---|---|
MULTIPLE_TASK_LAUNCH | 和 NEW_TASK_LAUNCH 联合使用,禁止将已有的任务改变为前景任务 (foreground)。 | 8 0x00000008 |
FORWARD_RESULT_LAUNCH | 如果这个标记被设置,而且被一个已经存在的 activity 用来启动新的 activity,已有 activity 的回复目标 (reply target) 会被转移给新的 activity。 | 16 0x00000010 |
NEW_TASK_LAUNCH | 设置以后,activity 将成为历史堆栈中的第一个新任务(栈顶)。 | 4 0x00000004 |
SINGLE_TOP_LAUNCH | 设置以后,如果 activity 已经启动,而且位于历史堆栈的顶端,将不再启动(不重新启动) activity。 | 2 0x00000002 |
NO_HISTORY_LAUNCH | 设置以后,新的 activity 不会被保存在历史堆栈中。 | 1 0x00000001 |