隐式意图

来源:互联网 发布:sql 没有权限 编辑:程序博客网 时间:2024/06/08 04:34

为什么要有隐式意图?
用于不同应用间的Activity之间 的跳转,由于不同应用之间看不同源代码,所以不能明确哪个组件。隐式意图使用意图过滤器进行组件间的匹配。
Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
例:打电话

  如调用电话拨号:Intent intent = new Intent();                    intent.setAction("android.intent.action.CALL");                    intent.setData("Uri.parse("tel:") + mobile");//mobile为电话号码(是数字)                     startActivity(intent);      如果采用隐式意图来激活组件,是怎么样找到组件的?      解释:如,电话拨号器在定义的时候,意图过滤器(Intent-filter)是这样定义的  Intent-filter>           <action android:name="android.intent.action.CALL"/>           <category android:name"android.intent.category.DEFAULT"/>           <data android:scheme="tel"/>       </Intent-filter>         1、先是有一个动作名称,<action android:name="android.intent.action.CALL"/>是由拨号器内部定义的,自己开发的应用也可以自己定义。          2、类别,在代码中并没有设类别,原因:当我们调用startActivity方法将intent意图传给操作系统时,startActivity方法的内部会为intent这个意图添加进一个类别,这个类别就是android.intent.category.DEFAULT。        3、数据,数据包含两个方面,数据所代表的Uri和数据的类型,此例中没有数据的类型,只有Uri,Uri又由scheme、主机名、路径三部分组成,对于Uri的匹配,只要跟给定的某一部分匹配就行了,此例中只要和scheme匹配就行。        此时,代码就可以和意图过滤器匹配了,因此,它就会调用这个过滤器所在的Activity,由此实现电话拨号功能。