Android Intent使用总结

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不会再变

你可能感兴趣的:(Android Intent使用总结)