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

本文介绍了Android中Intent及其过滤器IntentFilter的基本概念与使用方法。包括如何利用Intent启动Activity、Service和BroadcastReceiver,以及如何通过IntentFilter实现隐式Intent通信。此外还详细解释了IntentFilter中的action、data和category等元素的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速上手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“的活动都会匹配到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值