Intent的使用
- Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。
- Intent促进了组件之间的交互,这对于开发者非常重要,而且它还能做为消息的载体,去指导组件做出相应的行为,也就是说Intent可以携带数据,传递给Activity/Service/BroadcastReceiver。
启动Activity。Activity可以简单的理解为手机屏幕中的一个页面,你可以通过将Intent传入startActivity方法来启动一个Activity的实例,也就是一个页面,同时,Intent也可以携带数据,传递给新的Activity。如果想要获取新建的Activity执行结果,可以通过onActivityResult()方法去启动Activity。
启动Service。Service是一个不呈现交互画面的后台执行操作组件,可以通过将Intent穿入startService()方法来启动一个Service来启动服务。
传递广播BroadCast。广播是任何应用都可以接收到的消息,通过将Intent传递给 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast()方法,可以将广播传递接收方。
- Intent可以划分成显式意图和隐式意图。
显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
- 在定义活动时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。
<intent-filter>
的测试
- 动作
一条元素至少应该包含一个,否则任何Intent请求都不能和 该匹配。如果Intent请求的Action和中个某一 条匹配,那么该Intent就通过了这条的动作测试。如果Intent请求 或中没有说明具体的Action类型,那么会出现下面两种情况。
(1) 如果中没有包含任何Action类型,那么无论什么Intent请求都无法和这条匹配;
(2) 反之,如果Intent请求中没有设定Action类型,那么只要中包含有Action类型,这个 Intent请求就将顺利地通过的行为测试。
- 数据
- 类别
<action>
,在这个属性中,声明该组件可以执行的操作。该值必须是关于操作的一个字符串,并不是类常量
<intent-filter>
/*用于显示用户的数据。比较通用,会根据用户的数据类型打开相应的Activity。
比如 tel:13400010001打开拨号程序,http://www.g.cn则会打开浏览器等。*/
<action android:name="android.intent.action.VIEW" />
/*
决定应用的入口Activity,也就是我们启动应用时首先显示哪一个Activity。
*/
<action android:name="android.intent.action.MAIN" />
</intent-filter>
,使用一个或者多个数据URI(scheme、host、port、path等等)和数据的MIME类型来指定接受的数据类型
,声明接受的Intent类型
<!--决定应用程序是否显示在程序列表里-->
<category android:name="android.intent.category.LAUNCHER" />