Android Intent在Activity间的基本用法
Android:Intent在活动间的基本用法
Intent分为显式和隐式两种,其中显式用法较为直观简单,隐式用法则较为含蓄。
首先是Intent启动其他Activity的用法:
显式Intent
显式Intent的创建对应的构造函数需要依次传入Context、目标活动。
举个栗子:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
这样就完成了一个显式Intent的创建,这个Intent的作用是在FirstActivity的Context中调用SecondActivity,即由FirstActivity调用了SecondActivity;
创建Intent后通过startActivity(intent)即可启动SecondActivity.
隐式Intent
隐式Intent的使用需要在AndroidManifest文件的activity标签内声明对应的intent-filter属性,intent-filter内指定的具体为action和category标签值,action标签指定的是该activity能够响应的action,这里的action可能包括系统操作(如dial拨号,view打开网页等),也可以是用户自定义的值。
具体分析:
当在AndroidManifest文件的一个activity标签内的intent-filter标签内声明了action标签值为value1时,若在创建intent时传入的仅为该value1,则该该intent被启动后将启动AndroidManifest文件中的对应activity;另外,这里除了action标签的限制,还有category标签的限制 例子: 在创建的Intent未声明加入任何的category情况下,使用 > Intent intent = new Intent("com.allen_anker.activitytest.ACTION_START"); > > > > > 代码创建Intent并在AndroidManifest文件intent-filter标签下添加对应action,则该intent被启动后将启动在AndroidManifest文件声明了对应action的activity。
category的限制作用:
创建Intent后可通过addCategory方法向Intent添加category属性,那么当该Intent启动后,除了检查对应activity是否有创建Intent时声明的action值外,还会核对对应activity的intent-filter标签下有无对应的category,只有activity标签下的intent-filter的子标签category也同样声明了intent加入的category,intent才会启动该activity。
例子说明: > 保持以上代码不变,创建intent后加入category > intent.addCategory("com.allen_anker.activitytest.MY_CATEGORY"); > 对应目标activity的intent-filter应加入: > > ... > >
此时activity才可被该intent启动,其中新加入的category标签为通过addCategory方法加入的category,原代码中DEFAULT category是每次调用startActivity方法时自动加入到Intent中的,因此与需要在AndroidManifest文件中声明。
除了启动其他Activity外,Intent还可用于活动件数据传递:
除了启动其他Activity外,Intent还可用于活动件数据传递:
Intent的数据传递功能一般通过两个方法实现,一个是putExtra方法,放入数据,另一个是get…Extra方法取出数据,…代表具体数据类型,putExtra需要传入索引值(用于传入get…Extra中取出索引的数据)和数据值,获取数据是可通过被Intent启动的Activity内的getIntent方法获取启动该Activity的intent对象在调用对应方法。
另外是Intent可用于返回数据给上一个创建该intent的活动
这个用法的区别是首先需要用startActivityForResult启动intent,
需创建一个新的intent对象并放入想要返回的数据,之后通过setResult方法:
setResult(RESULT_OK, intent);
即可传回带有返回数据的intent对象;
intent调用的活动执行完毕后会回到原活动调用其onActivityResult方法处理返回数据。
上一篇: 悲喜交加的二货笑段