android intent相关

本文深入解析 Android 中 Intent 的工作原理及使用方式,包括其组成部分如 action、data 和 category 等,并介绍了如何通过显式和隐式 Intent 启动 Activity。此外还探讨了 Intent 在 Android 应用程序组件间通信中的作用。

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

intent 在android中就像activity之间包括不同class中的activity交互的胶水,把他们联系起来。

 

intent主要有以下几个重要组成部件

action ACTION_VIEW, ACTION_DIAL等 标准的ACTION_VIEW 被“android.intent.action.VIEW”调用

data 可以通过Uri

加上一些主要属性

category 是定义要执行的activity的附加属性,例如,CATEGORY_LAUNCHER activity将在启动时作为最高级显示

type        指定intent数据的明确类型

component 指定一个明确的class组件去用这个intent

extras     这是Bundle的额外信息,bundle可以提供扩展的信息给组件

 

intent主要通过两种方式去使用

显示intent    通过指定一个特定的class组件(通过setComponent(ComponentName) 或setClass(Context, Class))

   一般这种intent不包含其他信息,简单通过这种方式去启动这个class组件中内部包含的不同组件

隐示intent   没有直接指定一个组件,而是通过提供足够的信息给系统去决定哪个组件最符合要求然后去启动它。

 

 

通过隐示intent 可以用一个intent 映射一个 activity,BroadcastReceive或service(甚至多个)可以捕获它。

intent决策机制主要通过匹配<intent-filter>中的信息(在broadcast中, 任何的BroadcastReceiver

对象要通过registerReceiver(BroadcastReceiver,  IntentFilter)准确的注册)

 

 

action, type和category这三方面intent的信息决定intent的使用。

通过这些信息packageManager将会决定查询哪个组件能捕获这个intent

这个合适的组件主要通过AndroidManifest提供的intent信息决定的

 

1.action 如果给定了,必须作为组件可以处理的列出来

2.type(mimetype) 从intent的data接收。如果在intent的data中没有提供,像action必须包含在intent中

必须作为组件可以处理的列出来

3.categories 如果给定了,必须作为组件可以处理的列出来

也就是,如果你包含CATEGORY_LAUNCHER和CATEGORY_ALTERNATIVE,你将只能处理的组件

通过intent包含这两种categories,activity经常需要支持CATEGORY_DEFAULT以致我们这些intent能被

Context.startActivity()发现。

 

在AndroidManifest.xml每一个<activity>包含的每一个<intent-filter>表明这个activity可以接收的intent信息(模板)


 

 

startActivity(Intent)用于启动一个新的activity, 新的activity位于activity栈的顶端

startActivityForResult(Intent, int)当你想在一个自己启动的activity结束时得到消息结果时,

第二个参数(大于0)定义了启动的新的activity代号。

并且新的activity结束时将会返回结果,通过onActivityResult(int requestCode, int resultCode, Intent Data)

其中requestCode就是父activity指定新activity的代号

子activity可以通过setResult(int)(标准结果为RESULT_CANCELED(子activity失败时), RESULT_OK,或者任意自己定义的值 返回到父activity里

onActivityResult 的 resultCode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值