组件:Intent 和 intent-filter详细介绍

本文详细介绍了Android系统中的Intent机制,包括其作用、用途、分类以及组成部分等内容。解析了如何使用Intent进行组件间通信,如启动Activity、Service及发送广播等操作。

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

1、继承树
Intent
public class Intent
extends Object implements Parcelable, Cloneable

java.lang.Object
↳ android.content.Intent

2、Intent作用:
(1)APP内一个组件启动另外一个组件。
(2)一件组件启动另外一个APP的组件。
3、用途:
(1)、启动Activity:定义一个Intent,并将它传给startActivity()或startActivityForResult(),从而
(2)、启动Service:定义一个Intent,并将它传给startService()或bindService()方法,从而启动一个Service
(3)、发送广播:定义一个Intent对象,传递给sendBroadcast()方法或sendOrderedBroadcast()方法或sendStickyBroadcast()方法,给其他APP发广播。
4、分类
显示(explicit)Intent:明确包含要启动组件的完整类名(通过Component name信息)(被指定组件不需设置Intent filter就可以被启动)
隐式(Implicit)Intent:没有包含要启动的组件的完整类名。通地Action、Data、Category、Extras、Flags信息
HotkeyService代码中的Intent:
(1)查询APP启动组件名(隐式):
(2)启动APP(显式)
其实其他信息设置都没有用了

5、Intent信息组成:
(1)Component name 
通过Intent的setComponent()方法、setClass()方法、setClassName()方法或Intent的构造函数指定component name
<1>Intent(Context packageContext, Class<?> cls)
packageContext:为被启用组件对应包的Context
cls:被启用组件的类的Class类
例:Intent(abs.this,cdb.class)//一般用在同一个APP内,同一个APP才容易获取到其他主件Class类
abs与cdb两个组件在同一个APP内,abs组件启动cdb组件,
<2>Intent setClass (Context packageContext, Class<?> cls)//返会同一个Intent,为了同一个语句可以实现Intent方法的多次调用
Intent.setClase(abs.this,cdb.class)
<3>setComponent()
Intent i = new Intent();ComponentName comp = new ComponentName("com.android.camera","com.android.camera.GalleryPicker");i.setComponent(comp);

(2)action
用于隐式Intent调用,对应Intent Filter的action标签<action />
自定义的action最好使用APP包名作为该action 的前缀
常用Action
Intent.ACTION_VIEW: “android.intent.action.VIEW”:显示数据(图片、地址等)
Intent.ACTION_SEND: “android.intent.action.SEND”:分享
Intent.ACTION_MAIN: ”android.intent.action.MAIN“表示某个组件是APP的一个入口
(3)data
Intent中数据,包括Uri对象和数据的MIME类型,对应Intent Filter的data标签<data />
setDataAndType()同时设置在类型和数据
setData()//只设置数据,此时Type不能设置
setType()//只设置Type,时此Data不能设置
(4)Category 
对Intent组件信息的补充,是一个ArraySet容器,可以向里面添加任意数量的补充信息
通过addCategory()方法添加
常用:
CATEGORY_BROWSABLE 目标组件会允许自己通过一个链接被一个Web浏览器启动,该链接可能是一个图片链接或e-mail信息等。
CATEGORY_LAUNCHER 用于标识Activity是某个App的入口Activity。

(5)Extras
key-value键值对的形式来存储组件执行操作过程中需要的额外信息。
通过putExtra()方法来设置该属性。可以添加键值对和Bundle对象
(6)Flags
指示系统如何启动一个Activity

6、intent-filter属性
定义在AndriodManifest.xml,定义Activity对Intent信息的过滤。
(1)android:priority表示优先级,值-1000~1000,数值越大,优先级越高
广播会先传给优先级高的组件,再传给优先级低的组件
(2)action属性
只有android:name这个属性,对应Intent中的Action
(3)Category属性
对应Intent中的Category属性,Category为CATEGORY_LAUNCHER


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值