Android 标准Intent的使用详解
一 android系统用于activity的标准intent
1 根据联系人id显示联系人信息
intent intent = new intent(); intent.setaction(intent.action_view); //显示联系人信息 intent.setdata(uri.parse("content://contacts/people/492")); startactivity(intent);
2 根据联系人id显示拨号面板
intent intent = new intent(); intent.setaction(intent.action_dial); //显示拨号面板 intent.setdata(uri.parse("content://contacts/people/492")); startactivity(intent);
3 显示拨号面板, 并在拨号面板上将号码显示出来
intent intent = new intent(); intent.setaction(intent.action_view); intent.setdata(uri.parse("tel://15216448315")); startactivity(intent);
4 显示拨号面板, 并在拨号面板上将号码显示出来
intent intent = new intent(); intent.setaction(intent.action_dial); //显示拨号面板, 并在拨号面板上将号码显示出来 intent.setdata(uri.parse("tel://15216448315")); startactivity(intent);
5 根据联系人的id编辑联系人
intent intent = new intent(); intent.setaction(intent.action_edit); //编辑联系人 intent.setdata(uri.parse("content://contacts/people/492")); startactivity(intent);
6 显示通讯录联系人和其他账号联系人的列表
intent intent = new intent(); intent.setaction(intent.action_view); intent.setdata(uri.parse("content://contacts/people/")); startactivity(intent);
7 启动homescreen
intent intent = new intent(); intent.setaction(intent.action_main); //启动homescreen intent.addcategory(intent.category_home); startactivity(intent);
8 选择某个联系人的号码,返回一个代表这个号码的uri,如:content://contacts/phones/982
intent intent = new intent(); intent.setaction(intent.action_get_content); intent.settype("vnd.android.cursor.item/phone"); startactivityforresult(intent, 1);
9 打开多个应用选取各种类型的数据,以uri返回。返回的uri可使用contentresolver.openinputstream(uri)打开
该功能可用在邮件中附件的选取
举例如下:
选取一张图片, 返回的uri为 content://media/external/images/media/47
选取一首歌, 返回的uri为 content://media/external/audio/media/51
intent intent = new intent(); intent.setaction(intent.action_get_content); intent.settype("*/*"); intent.addcategory(intent.category_openable); startactivityforresult(intent, 2);
10 自定义一个chooser,不使用系统的chooser
该chooser可以有自己的标题(title)
并且不必让用户指定偏好
intent intent = new intent(); intent.setaction(intent.action_chooser); intent.putextra(intent.extra_title, "my chooser"); intent.putextra(intent.extra_intent, new intent(intent.action_get_content) .settype("*/*") .addcategory(intent.category_openable) ); startactivityforresult(intent, 2);
11 选取activity,返回的activity可在返回的intent.getcomponent()中得到
intent intent = new intent(); intent.setaction(intent.action_pick_activity); intent.putextra( intent.extra_intent, new intent(intent.action_get_content) .settype("*/*") .addcategory(intent.category_openable) ); startactivityforresult(intent, 3);
12 启动搜索,在以下示例代码中,"android"为要搜索的字符串
当执行这段代码后, 会在系统的chooser中显示可以用于搜索的程序列表
intent intent = new intent(); intent.setaction(intent.action_search); //启动搜索 intent.putextra(searchmanager.query, "android"); startactivity(intent);
13 启动web搜索,在以下示例代码中,"android"为要搜索的字符串
当执行这段代码后, 会在系统的chooser中显示可以用于搜索的程序列表,一般情况下系统中安装的浏览器都会显示出来
intent intent = new intent(); intent.setaction(intent.action_web_search); //启动搜索 intent.putextra(searchmanager.query, "android"); startactivity(intent);
二 android系统用于broadcastreceiver的标准intent
1 action_time_tick,系统时钟广播,系统每分钟都会发送一个这样的广播, 如果在应用开发中,有些逻辑依赖于系统时钟,可以注册一个广播接收者 这是一个受保护的action,只有系统才能发送这个广播 并且,在manifest文件中注册的广播接收者不能接收到该广播,若要接收该广播,必须在代码中注册广播接收者
registerreceiver(new broadcastreceiver(){ @override public void onreceive(context context, intent intent) { log.i("xxxx", "time_tick"); } }, new intentfilter(intent.action_time_tick));
2 在官方文档中,列出了以下标准的广播action
- action_time_tick 系统时钟广播
- action_time_changed 时间被重新设置
- action_timezone_changed 时区改变
- action_boot_completed 系统启动完成
- action_package_added 系统中安装了新的应用
- action_package_changed 系统中已存在的app包被更改
- action_package_removed 系统中已存在的app被移除
- action_package_restarted 用户重启了一个app,这个app的所有进程被杀死
- action_package_data_cleared 用户清除了一个app的数据
- action_uid_removed 系统中的一个user id被移除
- action_battery_changed 电池状态改变,这是一个sticky广播
- action_power_connected 设备连接了外部电源
- action_power_disconnected 外部电源被移除
- action_shutdown 设备正在关机
三 android中的标准类别(category)
类别(category)一般配合action使用,以下为系统中的标准类别,由于数量过多,只能在使用到时再详细研究
- category_default
- category_browsable
- category_tab
- category_alternative
- category_selected_alternative
- category_launcher
- category_info
- category_home
- category_preference
- category_test
- category_car_dock
- category_desk_dock
- category_le_desk_dock
- category_he_desk_dock
- category_car_mode
- category_app_market
四 android中的标准extra键值
这些常量用于在调用intent.putextra(string, bundle)时作为键值传递数据,同样由于数量较多,在此只列出索引
- extra_alarm_count
- extra_bcc
- extra_cc
- extra_changed_component_name
- extra_data_removed
- extra_dock_state
- extra_dock_state_he_desk
- extra_dock_state_le_desk
- extra_dock_state_car
- extra_dock_state_desk
- extra_dock_state_undocked
- extra_dont_kill_app
- extra_email
- extra_initial_intents
- extra_intent
- extra_key_event
- extra_originating_uri
- extra_phone_number
- extra_referrer
- extra_remote_intent_token
- extra_replacing
- extra_shortcut_icon
- extra_shortcut_icon_resource
- extra_shortcut_intent
- extra_stream
- extra_shortcut_name
- extra_subject
- extra_template
- extra_text
- extra_title
- extra_uid
五 intent中的标志(flag)
intent类中定义了一些以flag_开头的标志位,这些标志位中有的非常重要,会影响app中activity和broadcastreceiver等的行为。
以下为这些标志位的索引,是从官方文档上的截图。之后会对重要的标志加以详细分析
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android 标准Intent的使用详解
-
ASP.NET MVC中使用jQuery时的浏览器缓存问题详解
-
Android 开机广播的使用及配置
-
Android使用Pull解析器解析xml文件的实现代码
-
详解Python的Django框架中Manager方法的使用
-
Android系统开发中log的使用方法及简单的原理
-
详解Python的Django框架中inclusion_tag的使用
-
html5在android中的使用问题及技巧解读
-
详解Activity之singletast启动模式及如何使用intent传值
-
Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用