027android初级篇之Intent相关介绍

Intent概念

在Android中提供了Intent机制来协助Android应用间,组件间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。

Intent可以用来启动Activity,Service,Broadcasts。

Intent的属性

Intent有以下几个属性:动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。

Intent类型分为显式Intent(直接类型)、隐式Intent(间接类型)。官方建议使用隐式Intent。上述属性中,component属性为直接类型,其他均为间接类型。

相比与显式Intent,隐式Intnet则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。

1. Action属性

Action要表达的是Intent要完成的动作,是字符串常量。
SDK中定义了一些标准的Action常量。使用它们可以用来启动android系统的一些内置程序如相机,相片库,打电话,等等。(具体可参考文章009android初级篇之APP中使用系统相机相册等集成应用).

2. Data属性和extras属性

即执行动作要操作的数据和传递到目标的附加信息

/** 
 * 打开指定网页 
 * @param view 
 */  
public void invokeWebBrowser(View view) {  
    Intent intent = new Intent(Intent.ACTION_VIEW);  
    intent.setData(Uri.parse("http://www.google.com.hk"));  
    startActivity(intent);  
}  
  
/** 
 * 进行关键字搜索 
 * @param view 
 */  
public void invokeWebSearch(View view) {  
    Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);  
    intent.putExtra(SearchManager.QUERY, "android");    //关键字  
    startActivity(intent);  
}  

3. Category属性

Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息
几个常见的category如下:

Category    常量对应字符串    简单说明
CATEGORY_DEFAULT    android.intent.category.DEFAULT    默认的Category
CATEGORY_BROWSABLE    android.intent.category.BROWSABLE    指定该Activity能被浏览器安全调用
CATEGORY_TAB    android.intent.category.TAB    指定Activity作为TabActivity的Tab页
CATEGORY_LAUNCHER    android.intent.category.LAUNCHER    Activity显示顶级程序列表中
CATEGORY_INFO    android.intent.category.INFO    用于提供包信息
CATEGORY_HOME    android.intent.category.HOME    设置该Activity随系统启动而运行
CATEGORY_PREFERENCE    android.intent.category.PREFERENCE    该Activity是参数面板
CATEGORY_TEST    android.intent.category.TEST    该Activity是一个测试
CATEGORY_CAR_DOCK    android.intent.category.CAR_DOCK    指定手机被插入汽车底座(硬件)时运行该Activity
CATEGORY_DESK_DOCK    android.intent.category.DESK_DOCK    指定手机被插入桌面底座(硬件)时运

4.type属性

Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
例如:一个可以处理图片的目标Activity在其声明中包含这样的mimeType:

  

在使用Intent进行匹配时,我们可以使用setType(String type)或者setDataAndType(Uri data, String type)来设置mimeType。

5.component属性

目标组件的包或类名称
在使用component进行匹配时,一般采用以下几种形式:

intent.setComponent(new ComponentName(getApplicationContext(), TargetActivity.class));  
intent.setComponent(new ComponentName(getApplicationContext(), "com.scott.intent.TargetActivity"));  
intent.setComponent(new ComponentName("com.scott.other", "com.scott.other.TargetActivity"));  

其中,前两种是用于匹配同一包内的目标,第三种是用于匹配其他包内的目标。需要注意的是,如果我们在Intent中指定了component属性,系统将不会再对action、data/type、category进行匹配。

6. Flags(标志位)

期望这个意图的运行模式
可参考文章025android初级篇之Android am命令的实现 中部分的FLAG的定义。

参考链接

  1. 第十章:Intent详解
  2. 009android初级篇之APP中使用系统相机相册等集成应用)

你可能感兴趣的:(027android初级篇之Intent相关介绍)