Intent

来源:互联网 发布:课堂直播软件 编辑:程序博客网 时间:2024/06/08 05:16

        Intent在android中经常遇到,可以指定当前组件想要执行的动作,还可以传递数据,可以启动Activity,Service,Broadcast等。

  • intent对象是传递给Context.startActivity() 或Activity.startActivityForResult() 以启动Activity或是让一个存在的Activity做些事情。(也可以传递给Activity.setResult()来返回Activity的信息,这个函数叫startActivityForResult()。)
  • intent对象传递给函数来初始化一个service或是分发一个新的指令给一个正在进行的service。同样,intent传递给来建立一个在调用组件和目标service间的联系。如果一个service没有运行,它可以开始它。
  • intent可以传递给任何广播函数(如:Context.sendBroadcast()、Context.sendOrderedBroadcast()、 Context.sendStickyBroadcast()),intent被分派给所有感兴趣的广播接收者。很多广播源在系统内核里。
   

        Intent的调用可以分显式Intent和隐式Intent

  • 显式Intent 

Intent(Cintext packageContext,Class<?> cls) 两个参数分别为上下文和目标Activity


或者

传递参数Activity1

接收参数Activity2

传递参数Activity1并就收返回数据

接收参数Activity2,并返回数据

在Activity1中重写onActivityResult方法


  • 隐式Intent

显式的Intent通过窗口类的类名确定窗口,隐式Intent则通过字符串来确定窗口,字符串是和具体窗口绑定的。

隐式Intent之前首先要认识下android的过滤机制intent-filter

其中包括Action,Category,Data,Flag

Manifest.xml中可以看到这样一组代码

  • Action

Action就是用来和具体窗口进行绑定的一组字符串

通过这种方式可以可定具体的窗口。这就是隐式Intent。

android给出了许多隐式Intent的常量,比如电话,联系人,日历等Action的字符串常量,大家可以自行百度,当然也可以自定义。

ACTION_CALL activity 启动一个电话.
ACTION_EDIT activity 显示用户编辑的数据.
ACTION_MAIN activity 作为Task中第一个Activity启动
ACTION_SYNC activity 同步手机与数据服务器上的数据.
ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.
ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告
ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.
ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.

  • Category

如果两个窗口的Action一样怎么办,当我们隐式的去确定具体窗口时,就会显示出一个选择列表,让我们选择。那么我们该怎样去精确地定位到我们要确定的窗口呢,这里就用到了Category,也是和窗口进行绑定的字符串。

我们可以通过addCategory()方法来设置Category。


每个Intent中只能指定一个action,但却能指定多个category;类别越多,动作越具体,意图越明确(类似于相亲时,给对方提了很多要求)。

  • Data
Action和Category都是通过字符串对比的方式进行匹配,Data跟以上两种方式有所区别,它是按照一定得规则进行匹配的,Data属性是Android要访问的数据,多个组件匹配成功显示优先级高的; 相同显示列表。
分为两中方式
MIME Type和URL
  • URL
uri代表数据的地址,属于一种标识符。通常情况下,我们使用action+data属性的组合来描述一个意图:做什么
URL包括多种类型scheme://host:port/path,例如:
http://www.baidu.com
ftp://IP
content://mobile.android.data/cities等
使用setData()方法时Type会被设置成Null

打开指定网页
我们还可以通过这种方式,打开打电话界面,短信界面,安装卸载程序。
  • MIME Type
MIME Type是指要访问的数据类型,例如vedio/mp4,vedio/*,audio/*,text/plain等
Android一般会根据Data的属性值来分析数据类型,不用Type也可以,Type可以显式的指定数据类型
使用setType()方法时,URL会被设置成Null,如果即使用URL又使用Type,可以使用setDataAndType()方法。

就会播放音乐。



还有一个重要的Flag,它可以设置Activity的启动模式

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//SingleTask
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//SingleTop

Activity的启动模式,后面会整理


参考:http://www.cnblogs.com/engine1984/p/4146621.html

原创粉丝点击