当前位置:   article > 正文

Android 意图(Intent) 理论详解_intent意图对象的__ _ _方法用于指定意图的动作行为

intent意图对象的__ _ _方法用于指定意图的动作行为

Intent( 意图) 简 介

  • Android 意图(Intent)是一个要执行操作的抽象描述,是 Android 四大组件间之间的枢纽,通信的桥梁,比如可以通过:
  • startActivity(Intent)、startActivityForResult(Intent):启动一个Activity
  • startService(Intent)、bindService(Intent):启动一个Service
  • sendBroadcast:发送广播到指定 BroadcastReceiver
  • 假如现在需要在 Android 设备上通过浏览器打开一个 URL 地址,则可以发送 ACTION_WEB_SEARCH 意图到 Android 意图处理器来在浏览器中打开给定的 URL 。意图处理器通过解析一系列活动,并选择最适合本意图的活动(本例中为 Web 浏览器),意图处理器将传递设置好的网页地址到 Web 浏览器,并打开 Web 浏览器活动,代码如下所示:
  1. String q = "https://www.baidu.com";
  2. Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
  3. intent.putExtra(SearchManager.QUERY, q);
  4. startActivity(intent);
  • 上面几行代码只是一个简单的例子,后面会逐一说明其中的作用,Intent(意图)是 Android 开发至关重要的一个点,必须重点掌握。
  • public class Intent implements Parcelable, Cloneable{ 位于 android.content 包,常用构造器如下:

public Intent()
public Intent(String action) 
public Intent(String action, Uri uri)

Intent 常用属性

  • Intent(意图)对象是一组信息,包括如下的组件,具体取决于通信方式。

Action( 动作)

  • Action 是意图对象中必须的部分,被表现为一个字符串
  • 意图对象中的动作可以通过 setAction() 方法来设置,也可以在创建 Intent 的同时进行设置,通过 getAction() 方法来读取。
  • 动作将很大程度上决定意图的其它部分如何被组织,Intent 类定义了一系列动作常量对应不同的意图。

                                                                   常见的 Activity Intent  Action 常量

常量名称常量值 意义/描述
ACTION_MAINandroid.intent.action.MAIN应用程序入口
ACTION_VIEWandroid.intent.action.VIEW显示数据给用户
ACTION_ATTACH_DATAandroid.intent.action.ATTACH_DATA指明附加信息给其他地方的一些数据
ACTION_EDITandroid.intent.action.EDIT显示可编辑的数据
ACTION_PICKandroid.intent.action.PICK选择数据
ACTION_CHOOSERandroid.intent.action.CHOOSER显示一个Activity选择器
ACTION_GET_CONTENTandroid.intent.action.GET_CONTENT获得内容
ACTION_DIALandroid.intent.action.GET_CONTENT显示打电话面板
ACITON_CALLandroid.intent.action.DIAL直接打电话
ACTION_SENDandroid.intent.action.SEND直接发短信
ACTION_SENDTOandroid.intent.action.SENDTO选择发短信
ACTION_ANSWERandroid.intent.action.ANSWER应答电话
ACTION_INSERTandroid.intent.action.INSERT插入数据
ACTION_DELETEandroid.intent.action.DELETE删除数据
ACTION_RUNandroid.intent.action.RUN运行数据
ACTION_SYNCandroid.intent.action.SYNC同步数据
ACTION_PICK_ACTIVITYandroid.intent.action.PICK_ACTIVITY选择Activity
ACTION_WEB_SEARCHandroid.intent.action.WEB_SEARCHWeb搜索
ACTION_FACTORY_TESTandroid.intent.action.FACTORY_TEST工厂测试入口点
ACTION_SEARCHandroid.intent.action.SEARCH搜索

                                                          常见的 BroadcastIntent Action 常量

常量名称意义/描述
ACTION_TIME_TICK系统时间每过一分钟发出的广播
ACTION_TIME_CHANGED系统时间通过设置发生了变化
ACTION_TIMEZONE_CHANGED时区改变
ACTION_BOOT_COMPLETED系统启动完毕
ACTION_PACKAGE_ADDED新的应用程序apk包安装完毕
ACTION_PACKAGE_CHANGED现有应用程序apk包改变
ACTION_PACKAGE_REMOVED现有应用程序apk包被删除
ACTION_UID_REMOVED用户id被删除

Data( 数据)

  • 添加Data(数据)到 Intent(意图)过滤器,Data 类型可以是元数据类型、或者一条 URI、或者同时包括元数据类型与 URI 。
  • URI 由不同部分的属性来指定,属性是可选的,相互独立。赋值使用 setXxx 方法,对应着取值的 getXxx 方法。

Intent setData(@Nullable Uri data)  ——以 URI 来指定数据
Intent setType(@Nullable String type)  ——以元类型指定数据
Intent setDataAndType(@Nullable Uri data, @Nullable String type) ——同时指定 URI 和元类型

Uri getData()  ——获取 UIR 数据
String getType()  ——获取元数据

  • 如下所示为调用系统内置的短信应用发送信息:
  1. /**10086 发送短信
  2. * 也可以使用 Intent(String action, Uri uri) 构造器同时设置Action(动作)与Data(数据)
  3. * */
  4. Uri uri = Uri.parse("smsto:10086");
  5. Intent intent = new Intent(Intent.ACTION_SENDTO);
  6. intent.setData(uri);
  7. /**sms_body:设置短信的内容*/
  8. intent.putExtra("sms_body", "Hello");
  9. startActivity(intent);
  • 由此可见,不同的 Action 对应着不同的 Data,下表为常见的组合:

                                                                          Action 与 Data 属性匹配

动作/数据组合描述/说明
ACTION_VIEW content://contacts/people/1显示ID为1的用户的信息。
ACTION_DIAL content://contacts/people/1显示电话拨号器,并填充用户1的数据。
ACTION_VIEW tel:114显示电话拨号器,并填充给定的号码。
ACTION_DIAL tel:114显示电话拨号器,并填充给定的号码。
ACTION_EDIT content://contacts/people/1编辑ID为1的用户信息
ACTION_VIEW content://contacts/people/显示用户列表,以便查看
ACTION_VIEW http://www.google.com在浏览器中浏览该网站
ACTION_VIEW file://sdcard/mymusic.mp3播放MP3
ACTION_VIEW geo:39.2456,116.3523显示地图

category( 类别)

  • 类别是意图中可选的部分,包含该类型组件需要处理的意图的附加信息,和 Action 一样也是一个字符串。
  • addCategory() 方法为意图对象添加类别,removeCategory() 方法删除之前添加的类别,getCategories() 获取所有被设置到意图对象中的类别。
  • 如下所示是一段根据应用的包名来调用第三方 APP 打开的例子,如 微信的包名:com.tencent.mm、微博的包名:com.sina.weibo、网易有道的包名:com.youdao.dict :
  1. String packageName = "com.youdao.dict";
  2. PackageManager packageManager = getPackageManager();
  3. Intent intent = packageManager.getLaunchIntentForPackage(packageName);
  4. intent.addCategory(Intent.CATEGORY_LAUNCHER);
  5. intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
  6. intent.setAction("android.intent.action.MAIN");
  7. intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
  8. startActivity(intent);

                                                                               常见 Category 常量

常量名称意义/描述
CATEGORY_BROWSABLE目标Activity能通过在网页浏览器中点击链接而激活(比如,点击浏览器中的图片链接)
CATEGORY_GADGET表示目标Activity可以被内嵌到其他Activity当中
CATEGORY_HOME目标Activity是HOME Activity,即手机开机启动后显示的Activity,或按下HOME键后显示的Activity
CATEGORY_LAUNCHER表示目标Activity是应用程序中最优先被执行的Activity
CATEGORY_PREFERENCE表示目标Activity是一个偏爱设置的Activity

extra( 附加数据)

  • 以键值对描述的附加信息,传递给需要处理意图的组件。
  • 通过 putExtras() 方法设值,getExtras() 方法取值。
  • 如下所示为一段发送邮件的代码:
  1. Intent intent = new Intent(Intent.ACTION_SEND);
  2. intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
  3. intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
  4. intent.putExtra(Intent.EXTRA_TEXT, "Hello");
  5. intent.setType("text/plain");
  6. startActivity(intent);

                                                                                  常见 Extra 常量

常量名称意义/描述
EXTRA_BCC装有邮件密送地址的字符串数组
EXTRA_CC装有邮件抄送地址的字符串数组
EXTRA_EMAIL装有邮件发送地址的字符串数组
EXTRA_INTENT使用ACTION_PICK_ACTIVITY动作时装有Intent选项的键
EXTRA_KEY_EVENT触发该Intent的案件的KeyEvent对象
EXTRA_PHONE_NUMBER使用拨打电话相关的Action时,电话号码字符串的键,类型为String
EXTRA_SHORTCUT_ICON:使用ACTION_CREATE_SHORTCUT在HomeActivity创建快捷方式时,对快捷方式的描述信息。其中ICON和ICON_RESOURCE描述的是快捷方式的图标,类型分别为Bitmap和ShortcutIconResource。INTENT描述的是快捷方式相对应的Intent对象。NAME描述的是快捷方式的名字
EXTRA_SHORTCUT_ICON_RESOURCE EXTRA_SHORTCUT_INTENT EXTRA_SHORTCUT_NAME EXTRA_SUBJECT :描述信息主题的键
EXTRA_TEXT使用ACTION_SEND动作时,用来描述要发送的文本信息,类型为CharSequence
EXTRA_TITLE使用ACTION_CHOOSER动作时,描述对话框标题的键,类型为CharSequence
EXTRA_UID使用ACTION_UID_REMOVED动作时,描述删除的用户id的键,类型为int

flags( 标记)

  • 标记是意图的可选部分,说明Android系统如何来启动活动,启动后如何处理等。
标记说明
FLAG_ACTIVITY_CLEAR_TASK 如果在意图中设置,并通过 Context.startActivity 传递,这个标记将导致与该活动相关联的所有已存在的任务在活动启动前被清空。活动将成为一个空任务的根,所有旧的活动被结束。该标记可以与 FLAG_ACTIVITY_NEW_TASK 结合使用。
FLAG_ACTIVITY_CLEAR_TOP 如果设置该标记,活动将在当前运行的任务中被启动。这并不会启动一个新的活动实例,所有的在它之上的活动被关闭,这个意图作为一个新的意图被传递到已有的(目前在顶部的)活动。
FLAG_ACTIVITY_NEW_TASK 这个标记一般用于使得活动用于"启动器"风格的行为:为用户提供一个可以独立完成运行的数据,并启动完整儿独立的活动。
FLAG_ACTIVITY_SINGLE_TOP栈顶单实例(当该activity处于task栈顶时,可以复用,直接onNewIntent)

··············下一篇《Android 显式意图(Intent) 与 隐式意图

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/235989
推荐阅读
相关标签
  

闽ICP备14008679号