Android四大组件之Activity (IntentFilter匹配规则)

来源:互联网 发布:cip数据核字号查询 编辑:程序博客网 时间:2024/04/28 04:04

在Android中,Activity作为视图显示的不可或缺的成分,然而对于Activity之间的启动,我们最常用到还是显式调用,隐式调用很少用到。两者最大的区别就是显式调用需要提供明确的组件信息,包括包名和类名。而隐式调用则不需要,只要提供配置对应的过滤信息就可以完成启动。两者之间存在一个原则,如果两种调用同时存在时,那么以显式调用为主。

对于显式调用想必大家都很清楚,这里就不多做叙述,本文还是以介绍隐式调用为主,去分析那些存在于过滤器中的action,category,data的用法。

一,Action

action是一个字符串,系统也有预定义action,当然我们自己也可以自定义action。如果采用自定的action那么在启动Activity的时候必须保证Intent中的action和IntentFilter中的action完全一致。注意:action是区分大小写的。




下面介绍几种预定义Action:

1. 浏览网页

Uri uri = Uri.parse("http://www.google.com"); 

Intent it  = new Intent(Intent.ACTION_VIEW,uri); 

startActivity(it); 

2. 拨打电话 

Uri uri = Uri.parse("tel:xxxxxx"); 

Intent it = new Intent(Intent.ACTION_DIAL, uri);   

startActivity(it); 

3. 调用发短信的程序 

Intent it = new Intent(Intent.ACTION_VIEW);    

it.putExtra("sms_body", "The SMS text");    

it.setType("vnd.android-dir/mms-sms");    

startActivity(it); 

4. 发送Email 

it.putExtra(Intent.EXTRA_TEXT, "The email body text");      

it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");      

it.setType("message/rfc822");      

startActivity(Intent.createChooser(it, "Choose Email Client")); 

5. 打开录音机 

Intent mi = new Intent(Media.RECORD_SOUND_ACTION); 

startActivity(mi); 

6. 打开联系人列表     

Intent i = new Intent(); 

i.setAction(Intent.ACTION_GET_CONTENT); 

i.setType("vnd.android.cursor.item/phone"); 

startActivityForResult(i, REQUEST_TEXT); 

二. Category

和action一样,Category系统也有预定义。同时我们也可以自定义。它要求如果IntentFilter中必须存在一个Category字段,当然如果没

有加的话也不用担心系统默认在启动时会加上一个预定义字符串“android.initent.category.DEFAULT”,所以如果是隐式启动的话Intent需要

配上这个字段,否则会匹配失败。所以也可以知道,Intent中添加的Category必须和IntentFilter中的一个Category字段匹配上,否则启动失败。







三. Data

data的结构有些复杂,所以首先我们来了解一下data的组成。

1. scheme : 一种自定义协议 URI模式,比如 http,file,content当然既然是自定义类似test,xxxx都可以。

如:<data android:scheme="test"> <data android:scheme="content">

      注意:如果data中的scheme没有配置,那么之后的所有参数无效。

      2. host : URI的主机名,比如www.baidu.com,当然也可以是其他的。

3. port : URI的端口,比如8080,这个端口要在scheme和port都有指定的情况下才有用。

4.mimeType: 它的作用是告诉Android系统本Activity可以处理的文件的类型。如设置为 “text/plain”表示可以处理“.txt”文件。

 mimeType说明:https://www.2cto.com/kf/201502/374951.html








原创粉丝点击