您的位置:华清远见教育科技集团 >> Android资料 >> Android开发之Intent解析  
 
Android开发之Intent解析
分享到:

Intent到Intent过滤器的映射过程称为“Intent解析”。Intent解析可以在所有组件中找到一个可与请求的Intent达成佳匹配的Intent过滤器。

Intent解析的匹配规则。

Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表。

在Intent与Intent过滤器进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,任何不匹配的Intent过滤器都将被过滤掉。没有指定“动作”的Intent过滤器可以匹配任何的Intent,但没有指定“类别”的Intent过滤器只能匹配没有“类别”的Intent。

把Intent数据Uri的每个子部与Intent过滤器的<data>标签中的属性进行匹配,如果<data>标签指定了协议、主机名、路径名或MIME类型,那么这些属性都要与Intent的Uri数据部分进行匹配,任何不匹配的Intent过滤器均被过滤掉。

如果Intent过滤器的匹配结果多于一个,则可以根据在<intent-filter>标签中定义的优先级标签来对Intent过滤器进行排序,优先级高的Intent过滤器将被选择。

在此以6.2.1节中隐式启动Activity的例子WebViewIntentDemo为基础,在AndroidManifest.xml文件中注册Intent过滤器,以及设置<intent-filter>节点属性来捕获指定的Intent。

在AndroidManifest.xml中添加如代码清单6-19所示。

代码清单6-19 AndroidManifest.xml中添加代码


<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <data android:schema="http" />
    </intent-filter>

利用 <intent-filter> 可以把应用程序的操作注册到系统中,当用户调用 Intent 时,可以根据输入的 ACTION 和 Uri参数来找到这个应用程序。例如,在上述代码中,以 http 协议为例,打开 Google Map 可以用 URI: geo:38.899533,-77.036476。

此外,“协议”在 Android 里都可以随便定义。例如,写一个打开文件的关联 Intent,如 file:///sdcard/abc.txt。也可以用 type进行关联,其代码如代码清单6-20所示。

代码清单6-20 用type进行关联


<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <type android:value="test.item"/>
    </intent-filter>

然后,通过代码清单6-21所示代码就能定位到应用。

代码清单6-21 用 type 定位到应用代码


Intent it = new Intent(Intent.ACTION_VIEW);
    it.setType("test.item”);
    startActivity(it)

 更多相关文章

·Android开发之使用Intent隐式启动Activity
·如何使用Intent显式启动Activity?
·Android开发中Intent属性详解
·Android Activity 四种启动模式的区别
·Android Intent激活组件