Intent代表了Android应用的启动意图,系统会根据Intent来启动指定组件。
如果将将手机接入电脑,使用eclipse软件的控制台查看Intent的启动意图的属性。
例如:05-10 22:42:20.529: W/ActivityManager(744): Unable to start service Intent { act=com.yunos.vui.pushtalk.Service } U=0: not found
带下划线的是intent action
1.Component属性
Intent的Component属性属性需要接受一个ComponentName对象,包含以下几个构造器:
ComponentName(String pkg,String cls):创建pkg所在包下的cls类所对应的组件;
ComponentName(Context pkg,String cls):创建pkg所对应的包下的cls类所对应的组件;
ComponentName(String pkg,Class<?> cls):创建pkg所在包下的cls类所对应的组件;
上面的构造器都需要指定包名和类名——可以唯一确定地指定一个组件类
除此之外,还有以下方法:
setClass(Context packageContext,Class<?> cls):设置该Intent将要启动的组件
setClassName(Context packageContext,String className):设置该Intent将要启动的组件对应的类名
setClassName(String packageName,String className):设置该Intent将要启动的组件对应的类名
使用方式:假如第一个界面的代码实例化MainActivity.java,第二个界面的代码实例化SecondActivity.java
在第一个界面中:
ComponentName comp=new ComponentName(MainActivity.this,SecondActivity.java);
Intent intent=new Intent();
intent.setComponent(comp);
startActivity(intent);
在第二个界面中:
ComponentName comp=getIntent().getComponent();
获取组件包名:comp.getPackageName()
获取组件类名:comp.getClassName()
2.Action,Category属性和intent-filter配置
Action 完成的是一个抽象的动作,可以是自定义的,也可以使用系统自带的
例如:public final static String ACTION_CRAZYIT=“org.crazyit.intent.action.ACTION_CRAZYIT”
Intent intent=new Intent();
intent.setAction(intent);
startActivity(intent);
在将要启动的Activity配置文件中定义一个节点
<action android :name="org.crazyit.intent.action.ACTION_CRAZYIT">
这样就可以开启将要启动的Activity获取动作的操作:
String action=getIntent().getAction;
Category与Action差不多,但是向Intent中注册不用set开头的方法,而用add开头的方法
获取多个Category的操作:
Set<String> cates=getIntent().getCategories();
通过系统的Category与Action所定义的常量可以开启各种各样的界面
3.Data,Type属性与intent-filter配置
Data属性接受一个uri对象,uri对象的常用格式:
content://com.android.contacts/contacts/1
tel:123
Uri字符串总满足如下格式:
scheme://host:port/path
Type属性用于指向Data对应的MIME类型,可以是自定义,但要符合abc/xyz格式的字符串即可
这俩个属性之间的关系:
后面设置的属性总会覆盖前面的属性
如果要保留俩个属性必须用:
setDataAndType()
在配置文件中的申明:
<data android :mineType=""
android :scheme=""
android :host=""
android :port=""
android :path=""
android :pathPrefix=""
android :pathPattern=""/>
mineType:申明组件所能匹配的Intent的Type属性
pathPrefix:path前缀
pathPattern:path字符串模板
Type属性指定节点中的mineType
只要满足其中的uri的一部分,或者全部满足就可以开启目标Activity
4.Extra属性
Extra属性主要用于多个Action之间的数据交换,该属性值应该是Bundle对象,该对象是一个键值对,就像Map一样可以存入多个键值对,这样可以通过Intent在Activity之间进行数据交换。
5.Flag属性
为Intent添加一些额外的控制旗标,Intent可调用addFlags()方法添加控制旗标
常用的控制旗标:
FLAG_ACTIVITY_BROUGHT_TO_FRONT:如果通过该Flag启动的Activity已经存,将其带到前台,但其他的Activity还存在任务栈中。只是把该Activity提到前台,而不改变其他在任务栈中的顺序。
FLAG_ACTIVITY_CLEAR_TOP:这种方式,是将目标Activity上的所有Activity都弹出使其暴露在前台。
FLAG_ACTIVITY_NEW_TASK:重新创建一个新的Activity
FLAG_ACTIVITY_NO_ANIMATION:启动Activity时不使用过渡动画
FLAG_ACTIVITY_NO_HISTORY:该种方式,目标Activity不会存在任务栈中
FLAG_ACTIVITY_PEORDER_TO_FRONT:如果Activity存在,将其带到前台,但其他的Activity还存在任务栈中。
FLAG_ACTIVITY_SINGLE_FRONT:如果Activity存在栈顶,再次开启,任务栈中的Activity不会再变