在上一篇中,咱们了解到,Intent实现跳转,须要设置一个target,就是找到对应Activity的一个标志。而这个标志能够是一个class,或者是一个Action。前者能够称之为显示跳转,然后者就是隐式的跳转了。
Intent能够启动Activity,启动Service,或者是发送一个广播信息。下面就介绍一下Intent的相关知识。android
ComponentName(组件名称)
这个参数是用来为Intent显性的指定目标组件。一旦设置了ComponentName,Android会直接将Intent传递给组件名所指定的组件去启动它。若是没有设置ComponentName,那么该Intent就是隐式的,Android系统会根据其余的Intent的信息肯定跳转到哪一个组件。若是你启动一个本身App中的组件,能够经过显式调用。须要注意的是,当启动Service的时候,尽可能指定Component Name。不然,就不能肯定最终哪一个App的哪一个组件被启动了,而且用户也看不到哪一个Service启动了。数组
ComponentName c = new ComponentName(FirstActivity.this,SecondActivity.class); Intent intent1 = new Intent(); intent1.setComponent(c); startActivity(intent);
标准的用法就是这样的,常规状况下咱们不会写这么复杂,简写为 Intent intent1 = new Intent(FirstActivity.this,SecondActivity.class);
浏览器
action是表示了要执行操做的字符串,表明Intent要完成的一个抽象“动做”。发送的这个操做Intent并不负责找到具体的组件,而是由intent-filter进行筛选。其对应着Intent Filter中的action标签<action />。工具
action须要在AndroidManifest.xml中注册,下面给出一个样例测试
<activity android:name=".activity.FirstActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
使用方法:网站
Intent intent = new Intent(); intent.setAction("view_learn"); startActivity(intent);
Category(类别)
Category是用来位Action提供额外的附加类别,二者一般会结合使用,一个Intent只能有一个Action可是能够有多个Category。当一个Intent设定了Category后,系统会根据Category寻找一组对应的组件,拥有这个Category属性的都会收到这个请求。
这个Category对应的组件,能够在AndroidManifest文件设定。 <category android:name="android.intent.category.LAUNCHER" />
在组件中的调用方式以下:this
Intent i = new Intent(); i.addCategory(Intent.CATEGORY_APP_BROWSER); startActivity(i);
Data(数据),Type(MIME类型)
Data一般用于Action属性提供操做的数据,接受一个URI对象;URI的格式一般为:scheme://host:port/path,参数的意义依次为:协议头,主机。端口,路径。
Type一般用于指定Data所制定的Uri对应的MIME类型,用于作一个限制,只容许经过MIME指定的数据。
这些属性都是在AndroidManifest文件中定义的,能够定义一个data标签,样式以下:code
<data android:scheme="test" android:host="test" android:port="5678" android:path="/test"/>
在另外一个组件中的调用以下:orm
Intent i = new Intent(); i.setData(Uri.parse("test://test:5678/test")); startActivity(i);
主要是用于标记Activity的启动模式,常见的标记主要有如下几种:xml
标记 | 意义 |
---|---|
FLAG_ACTIVITY_NEW_TASK | 会建立一个新的Activity,至关于Activity启动模式的standard |
FLAG_ACTIVITY_BROUGHT_TO_FRONT | 若是栈中已有该Activity则直接将该Activity带到前台 |
FLAG_ACTIVITY_CLEAR_TOP | 清除当前Activity之上的全部实例,该Flag至关于Activity启动模式中的singleTask |
FLAG_ACTIVITY_SINGLE_TOP | Activity栈中只会存在一个实例,若是不在栈顶会直接带到栈顶 |
FLAG_ACTIVITY_NO_HISTORY | 使用该标志时,启动的Activity不会保存在栈中 |
在Android的framework中也定义了一些经常使用的常量,这里整理一下。
常见的Activity Action Intent常量:
常量名称 | 常量值 | 意义 |
---|---|---|
ACTION_MAIN | android.intent.action.MAIN | 应用程序入口 |
ACTION_VIEW | android.intent.action.VIEW | 显示数据给用户 |
ACTION_ATTACH_DATA | android.intent.action.ATTACH_DATA | 指明附加信息给其余地方的一些数据 |
ACTION_EDIT | android.intent.action.EDIT | 显示可编辑的数据 |
ACTION_PICK | android.intent.action.PICK | 选择数据 |
ACTION_CHOOSER | android.intent.action.CHOOSER | 显示一个Activity选择器 |
ACTION_GET_CONTENT | android.intent.action.GET_CONTENT | 得到内容 |
ACTION_DIAL | android.intent.action.GET_CONTENT | 显示打电话面板 |
ACITON_CALL | android.intent.action.DIAL | 直接打电话 |
ACTION_SEND | android.intent.action.SEND | 直接发短信 |
ACTION_SENDTO | android.intent.action.SENDTO | 选择发短信 |
ACTION_ANSWER | android.intent.action.ANSWER | 应答电话 |
ACTION_INSERT | android.intent.action.INSERT | 插入数据 |
ACTION_DELETE | android.intent.action.DELETE | 删除数据 |
ACTION_RUN | android.intent.action.RUN | 运行数据 |
ACTION_SYNC | android.intent.action.SYNC | 同步数据 |
ACTION_PICK_ACTIVITY | android.intent.action.PICK_ACTIVITY | 选择Activity |
ACTION_SEARCH | android.intent.action.SEARCH | 搜索 |
ACTION_WEB_SEARCH | android.intent.action.WEB_SEARCH | Web搜索 |
ACTION_FACTORY_TEST | android.intent.action.FACTORY_TEST | 工厂测试入口点 |
常见的BroadcastIntent Action常量 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被删除 |
Intent的Action和Data属性匹配
Action属性 | Data属性 | 说明 |
---|---|---|
ACTION_VIEW | content://contacts/people/1 | 显示id为1的联系人信息 |
ACTION_DIAL | content://contacts/people/1 | 将id为1的联系人电话号码显示在拨号界面中 |
ACITON_VIEW | tel:xxx | 显示电话为xxx的联系人信息 |
ACTION_VIEW | http://xxx.xxx | 在浏览器中浏览该网站 |
ACTION_VIEW | file://sdcard/xxx.mp3 | 播放MP3 |
ACTION_VIEW | geo:xxx,xxx | 显示地图 |
常见的Category常量:
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常量:
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建立快捷方式时,对快捷方式的描述信息。 |
EXTRA_TEXT | 使用ACTION_SEND动做时,用来描述要发送的文本信息,类型为CharSequence |
EXTRA_TITLE | 使用ACTION_CHOOSER动做时,描述对话框标题的键,类型为CharSequence |
EXTRA_UID | 使用ACTION_UID_REMOVED动做时,描述删除的用户id的键,类型为int |
Android.telephony包中的类:
类名 | 描述 |
---|---|
CellLocation | 表示设备位置的抽象类 |
PhoneNumberFormattingTextWather | 监视一个TextView控件,若是有电话号码输入,则用formatNumber()方法处理电话号码 |
PhoneNumberUtils | 包含各类处理电话号码字符串的使用工具 |
PhoneStateListener | 监视手机中电话状态变化的监听类 |
ServiceState | 包含电话状态和相关的服务信息 |
TelephonyManager | 提供对手机中电话服务信息的访问 |
与短信服务相关的类主要在包android.telephony.gsm中
类名 | 描述 |
---|---|
GsmCellLocation | 表示GSM手机的基站位置 |
SmsManager | 管理各类短信操做 |
SmsMessage | 表示具体的短信 |