欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Intent在Activity间的基本用法

程序员文章站 2022-07-10 09:43:26
Android:Intent在活动间的基本用法 Intent分为显式和隐式两种,其中显式用法较为直观简单,隐式用法则较为含蓄。 首先是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还可用于活动件数据传递:

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方法处理返回数据。