Android7.0之从零开始:Intent及IntentFilter

来源:互联网 发布:聂士成 知乎 编辑:程序博客网 时间:2024/06/07 02:40

快速上手intent及intentFilter。

1.Intent及intentFilter的介绍

Intent 中文意思 “意图“,一般用组件间的通信。可用来激活Activity,Service,BroadCast Recevier。
激活Activity startActivity(intent);
激活Service startService(intent);
激活Broadcast sendBroadcast();

intent通信分显性和隐形,而intentFilter是实现隐形的intent通信。

2.Intent简单用法

只需要这两排代码就可以实现活动之间的跳转。
new Intent()中的第一个参数是当前活动,第二个是想要转去的目标活动。

Intent intent = new Intent(MainActivity.this,IntentFilterActivity.class);                startActivity(intent); 

我们可以在跳转的时候,传递一些信息

Intent intent = new Intent(MainActivity.this,IntentFilterActivity.class);intent.putExtra(String类型的key,任意类型的value);startActivity(intent); 

而取出传递信息只需要在目标Activity中如下操作

Intent intent = getIntent();//所存信息的类型        例如String answer = intent.get("key");

当然我们还可以 刷新我们当前的activity;
可以通过

Intent intent =getIntent();finish();startActivity(intent);  

3.IntentFilter的用法

当我们不想显性表露我们的意图可以使用 IntentFIlter

简单来说,我们可以通过 intent.setAction(), .setData(), .addCategory();
对intent添加标识符,然后通过intentFilter通过action,data,category识别出自己的intent,然后触发相应组件。

不需要设置 intentFilter,就可以通过setAction以下关键字,启动一些系统自带的服务。(只列出了一些常用的)

1 Intent.ACTION_MAIN
标识Activity为一个程序的开始

intent.setAction(Intent.ACTION_MAIN);

2 Intent.Action.DIAL
调用拨号面板

更多请见官方api
https://developer.android.com/reference/android/content/Intent.html

intentFilter分别有三个内容: action ,data, category

3.1 action

intent-filter 至少有一个 action ,否则无法与任何intent匹配
intent 通过方法intent.setAction(“”);设置action,只要与 intent-filter 中的一条 action 匹配(如果没有data category或者这两个都匹配) 则触发相应组件。

如果同时匹配两个intentFilter,你将发现非常有趣的现象。

3.2 category

intent 通过方法 intent.addCategory();添加 category。而只有当与intentFilter中 category 全部匹配才能 触发相应事件。

3.3data

而 data 和 setData(); 是通过 scheme, host, port, path, pathPrefix, pathPattern 是用来匹配 Intent 中的 Data Uri 的。

可通过

intent.setData(url);

配置
然后
在intentFilter中采用

    < data android:scheme="scheme"    android:host="host"    android:port = "port"    android:path = "path"

进行匹配

3.4 mimeType (补充:也可用来匹配Intent)

如果Intent 使用了 intent.setType(“key”);,那么所有注册了android:mimeType = “key“的活动都会匹配到。

0 0
原创粉丝点击