Intent是Android启动指定组件的意图,Intent分为显式意图和隠式意图,显式意图就是指定具体跳转的那个应用,用于应用中的activity的跳转,隠式意图用于规定action的特定组件。对于同一个项目中的跳转不使用隠式意图,隠式意图是在你手机所有安装的程序的动作中找对应的意图,是比较耗时的
方法
显式的意图设置
Intent intent=new Intent(this,TwoActivity.class);
startActivity(intent);
//setClass(Context packageContext,Class<?>cls);设置该Intent将要启动的组件
Intent intent=new Intent();
intent.setClass(this, TwoActivity.class);
startActivity(intent);
setClassName(Context packageContext,StringclassName);//设置Intent将要启动的组件对应的类名
setClassName(String packageName,String className);//设置Intent将要启动的组件对应的类名
Component属性
Intent的Component属性需要ComponentName对象来指定开启的组件。
ComponentName的构造方法有
ComponentName(Stringpkg,String cls);//创建pkg所在包下的cls类所对应的组件。
ComponentName(context pkg,String cls);//创建pkg所对应的包下的cls类所对应的组件。
ComponentName(Context pkg,Class<?>cls);//创建pkg所对应的包下的cls类所对应的组件。
Intent intent=new Intent();
intent.setComponent(new ComponentName(this, TwoActivity.class));
startActivity(intent);
实例二
ResolveInfoinfo = this.info.get(i);
//该应用的包名
String pkg =info.activityInfo.packageName;
//应用的主activity类
String cls =info.activityInfo.name;
ComponentName componet = newComponentName(pkg, cls);
Intent intent = new Intent();
intent.setComponent(componet);
startActivity(intent);
隠式意图设置
在隐式意图中每个Intent只能指定一个Action,但可以指定多个Category,可以通过addCategory()添加,程序创建Intent时,默认启动Category属性值是Intent.CATEGORY_DEFAULT(常量值:android.intent.category.DEGAULT);,此时对应的Intent_filter应该包含Category属性为android.intent.category.DEGAULT()。
Intent_filter中可以规定多个Action,多个Caytegory,则指定该Intent_filter的组件可以被多个动作启动,但需要满足的要求要大于、等于Intent所指定的要求,才能启动组件。
Intent intent=new Intent();
intent.setAction("com.start.activity");//规定隠式意图
//intent.setAction(“com.start”);//一个Intent只有一个动作
intent.addCategory("com.category");//可以添加多个category
startActivity(intent);//启动的是动作是com.start.activity,caegory是<categoryandroid:name="android.intent.category.DEFAULT" />和<categoryandroid:name="com.category">的activity
activity的注册
<activity
android:name=".TwoActivity"
android:label="@string/app_name"
>
<intent-filter>
<actionandroid:name="com.start.activity"/>//过滤的多个动作
<actionandroid:name="com.start"/>//过滤的多个动作
<categoryandroid:name="android.intent.category.DEFAULT" />
<categoryandroid:name="com.category"></category>
</intent-filter>
</activity>
根据隠式意图调用系统的Activity则是根据系统的动作进行跳转
Intent的extra属性
Intent的extra属性是用于intent的数据传递,intent可以通过putExtra()进行传递数据的设置,是以key—value的形式传递的,可以传递基本数据类型、bundle类型、String类型、实现了序列化的对象。
Intent的flag属性
Flage是intent额外的控制旗标,可通过addFlages()进行添加
FLAG_ACTIVITY_BROUGHT_TO_FRONT:在栈中只有ActivityA,从A通过该flag启动B,后B在启动c和D,后D在启动B,则会将B移动到前台,而对A、C、D不会有影响现在栈中是A、C、D、B,即只会把栈中的该Activity移动到顶端,显示到前台
FLAG_ACTIVITY_CLEAR_TOP:该flag加载的Activity跳转的Activity若在栈中其上有Activity会移除上面的而将跳转的Activity置顶,相当于SingleTask
FLAG_ACTIVITY_NEW_TASK:默认的启动的旗标,控制重新创建一个新的Activity。
FLAG_ACTIVITY_NO_ANIMATION:控制启动该activity时不适用过渡动画
FLAG_ACTIVITY_NO_HISTORY:控制启动的activity不会保留在activity栈中
FLAG_ACTIVITY_REORDER_TO_FRONT:若activity存在则会直接将其带到前台
FLAG_ACTIVITY_SINGLE_TOP:相当于singleTop,只要activity子栈顶就不会重新创建实例
Intent还有data和type属性,使用较少,就不多做解释了
//意图传值中的传递对象集合
Intent intentHC = new Intent(.this,ListActivity.class);
intentHC.putExtra("pdbillList", (Serializable)pdBillhead.getXtShelfArticles());//pdBillhead.getXtShelfArticles()获取的是一个list集合,lis集合中的对象实现了Serializable
startActivity(intentHC);
//接收端
pdbillList = (List<对象实体类>) getIntent().getSerializableExtra("pdbillList");