前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >027android初级篇之Intent相关介绍

027android初级篇之Intent相关介绍

作者头像
上善若水.夏
发布2018-09-28 10:41:12
4390
发布2018-09-28 10:41:12
举报
文章被收录于专栏:上善若水上善若水

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属性

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

代码语言:javascript
复制
/** 
 * 打开指定网页 
 * @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如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<data android:mimeType="image/*" />  

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

5.component属性

目标组件的包或类名称

在使用component进行匹配时,一般采用以下几种形式:

代码语言:javascript
复制
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中使用系统相机相册等集成应用
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.01.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Intent概念
  • Intent的属性
    • 1. Action属性
      • 2. Data属性和extras属性
        • 3. Category属性
          • 4.type属性
            • 5.component属性
              • 6. Flags(标志位)
              • 参考链接
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档