Android简明开发教程七:Intents和Intent Filters

26、Android开发:深入理解Intents与Intent Filters 本文深入探讨了Android开发中的核心概念Intent与Intent Filters,详细解析了Intent对象的重要参数如类别(Category)和额外数据(Extras),并介绍了显式Intent与隐式Intent的定义、区别及使用场景。文章还通过一个完整的示例项目IntentFilters,演示了如何使用Intent在两个活动(模拟时钟活动和数字时钟活动)之间进行切换,涵盖了项目创建、用户界面设计、活动配置以及AndroidManifest.xml文件的修改等内容。通过这些实践操作,读者可以更好地理 阅读详情

Android应用中的三个核心组件:Activities,Services和broadcast receivers都是通过称为“Intent”的消息来激活的。Android应用一个特点是“低耦合”,各个Activities,Services和broadcast receivers相当独立,可以看成是一个个“迷你应用”,而Intent是这些“迷你应用”的粘合剂,Intent不但可以用于同一个Application之间Activities,Services和broadcast receivers的交互,也可以用于不同Application之间Activities,Services和broadcast receivers的交互。
Intent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性。用个容易理解的概念,在访问网站时,我们需要提供网站的URL,有时还需要通过URL参数,在Android世界里,Intent 的功能类似于URL,Android操作系统根据Intent来触发对于的Activitives,Services或是Broadcast Receivers。

Android应用中的三个核心组件:Activities,Services和broadcast receivers都是通过Intent来触发的,当它们触发的机制各不相同,而且不会有重叠,也就是说发给Activity的Intent不会激活Service或是broadcast receivers,发给broadcast receivers的Intent也不会触发Activity和Service。

  1. Activity 通过方法 Context.startActivity() 和 Activity.startActivityForResult()来调用。以函数调用为参考startActivity() 相当于调用无返回值的函数,startActivityForResult()调用的Activity有返回值,可以通过Activity.setResult()来返回结果。
  2. Context.startService()用来初始化Service,Context.bindService()可以用来建立与目标Service之间的连接,如果Service没有运行,则会启动该Service。
  3. Broadcast Receiver是通过 Context.sendBroadcast(), Context.sendOrderedBroadcast(), 和Context.sendStickyBroadcast()来触发的。大部分的Broadcast消息来自于Android操作系统,如电池状态,来电,短消息等。

和URL不太一样的是,URL和网站一般是一一对应的,而一个Intent可以用来触发某个指定的Activity,Service或是Broadcast Receiver,或是触发多个满足Intent条件的Activities,Services或是Broadcast Receivers。

下面来看看Android OS如何根据Intent来找到满足触发条件的Activity,Service或是Broadcast Receiver. 借用SQL 数据库的概念可以更好的理解。

SELECT (Activitives|Services|Broadcast Receivers) AS Target
FROM (List in AndroidManifest.xml)
WHERE Intent Meet Target’s (Intent Filter)

意思就是从AndroidManifest.xml中定义的Activities,Services和Broadcast Receiver列表中查找符合Intent 条件的Activities,Services,或是Broadcast Receivers。所有能活被激活的Activity,Service和Broadcast Receiver都必须在AndroidManifest.xml有定义,否则Android OS无法查询到该目标,相当于数据库中无记录,即使你在代码中定义了该Activity,Service或Broadcast Receiver。

Intent
Intent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性。它主要包含下列信息:
Component name: 可以处理该Intent的组件名称,组件名称指定义Activity,Service的包和类的全名称。比如类名为com.pstreets.gisengine.AndroidGISEngineTutorial ,包名为com.pstreets.gisengine。 组件名称为可选项,如果指定了,意味明确指定用来响应该Intent的Activity,Service。
Action: 列出需要执行的操作名称。或者在Broadcast Intents的情况下给出发生的事件名称。

Constant Target component Action
ACTION_CALLactivity开始打电话.
ACTION_EDITactivity显示编辑对话框.
ACTION_MAINactivity作为一个任务(应用)的起始Activity,对于可以从Android应用列表的应用来说,都需要在AndroidManifest.xml 中设置ACTION_MAIN的Intent-Filter属性。
ACTION_SYNCactivity同步数据.
ACTION_BATTERY_LOWbroadcast receiver电池电量低告警.
ACTION_HEADSET_PLUGbroadcast receiver耳机插入或拔出.
ACTION_SCREEN_ONbroadcast receiver屏幕打开或关闭.
ACTION_TIMEZONE_CHANGEDbroadcast receiver时区变动.

Data: 定义不数据的URL以及数据的MIME类型。不同的Action能够处理的Data类型也不一样,比如 ACTION_CALL,它处理的数据格式为tel: URI,URI为电话号码。
Category: 定义了可以响应Intent的附加信息,一个Intent可以指定多个Category类型。和Action类似,Android 预定义了一些Category类型:

Constant Meaning
CATEGORY_BROWSABLE 表示目标Activity可以使用浏览器安全显示指定连接,比如说一个图片或是Email消息.
CATEGORY_GADGET 表示该Activity可以当作一个Gadget嵌入到其它可以放置Gadget的Activity中。
CATEGORY_HOME 表示还Activity是Home Screen,可以设置这个属性来替换Android自带的Home Screen。
CATEGORY_LAUNCHER 该Activity可以显示在Android程序管理器中。一般应用的主Activity都会在AndroidManifest.xml 定义该属性。

Extra: 附加Key-Value列表,可以向目标Activity传送附加参数。可以理解成函数调用时的参数。
Flags: 指出Android启动目标Activity时的一些选项(比如目标Activity隶属于那个应用等)。

除非是Intent明确指定目标(Explicitly)Activity的类和包名称,这是Activity无需在AndroidManifest.xml定义intent-filter,其它情况也叫隐含(Implicit)方式启动目标Activity,在这种情况下Android 操作系统查找目标Activity,Service或是Broadcast Receiver时主要根据Intent 的Action,Data 和Category属性来匹配定义在AndroidManifest.xml 中 Activity,Service或是Broadcast Receiver的 Intent Filters。

Intent Filters

Android中没个有效的Activity,Service,Broadcast Receiver都必须在AndroidManifest.xml有对应的定义。除非只使用明确调用发生来启动目标Activity,每个Activity都需要定义一个intent-filter。下面是是明确指定目标Activity的示例代码:

1
2
Intent intent= new Intent(SplashActivity. this ,GNavigator. class );
startActivity(intent);

而更一般的情况,Activity在AndroidManifest.xml具有如下定义:

<activity android:name=”.AndroidGISEngineTutorial”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<action android:name=”com.example.project.SHOW_CURRENT” />
<action android:name=”com.example.project.SHOW_RECENT” />
<action android:name=”com.example.project.SHOW_PENDING” />

….
<category android:name=”android.intent.category.DEFAULT” />
<category android:name=”android.intent.category.BROWSABLE” />
…
<data android:mimeType=”video/mpeg” android:scheme=”http” . . . />
<data android:mimeType=”audio/mpeg” android:scheme=”http” . . . />
….
</intent-filter>
< /activity>

Activity的intent-filter可以包含action,category,data 子元素,给出了该Activity能够处理的Intent的Action,Category和数据类型。Android 操作系统就是根据Activity的intent-filter来匹配Intent,从而触发目标Activity,或是Service,Broadcast Receiver。

最常见的一个Intent Filter组合如下:

<intent-filter . . . >
<action android:name=”code android.intent.action.MAIN” />
<category android:name=”code android.intent.category.LAUNCHER” />
</intent-filter>

表示用户可以从Android设备的应用程序管理器启动该Activity,这个Activity为应用的主Activity,主Activity可以再使用Intent触发或是启动其它Activity。

Halcon棋盘格畸变矫正 通常我们使用的相机都是带有一定的畸变的,只是畸变的大小不同。对于我们常见的测量项目来说,对测量精度的要求很高,通常从相机镜头上进行优化,但是即使镜头优化或者成本原因,造成图像仍有一定的畸变时,我们就可是使用棋盘格标定板,进行畸变矫正。 阅读详情

相关推荐

手把手教你用Python模拟侧信道攻击:从电磁辐射到数据窃取(附防御代码)

本文详细介绍了如何使用Python模拟侧信道攻击,从电磁辐射信号采集到数据窃取的全过程,并提供了实用的防御代码。通过实战案例,帮助安全研究员和开发者理解侧信道攻击原理,掌握信号处理与图像重建技术,同时学习有效的噪声干扰和电磁屏蔽防御措施。

weixin_28716443的博客 164

Android开发之旅: Intents和Intent Filters(理论部分)

引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中。他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互。 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义!Android应用程序也是一个沙盒,但是他们能够使用Intent、Broadcast Receivers、Adapters、Content Providers、Internet去突破他们的边界互相...

weixin_33985679的博客 271

瑞萨RZN2L工业以太网开发避坑指南:EtherCAT从入门到通信调试全流程

本文详细解析了瑞萨RZN2L MPU在工业以太网开发中的EtherCAT从站配置与通信优化全流程。通过硬件设计关键点、协议栈选型、PDO映射策略及DC同步精度优化等实战技巧,帮助开发者快速搭建高效通信框架并解决调试中的常见问题,特别适合工业自动化领域的实时通信需求。

aitie1479的博客 462

Android四大核心组件——汇总

一、Activity 生命周期 七大方法详解 onCreate:Activity创建时第一个调用的方法,通常我们在该方法中加载布局文件,初始化UI组件,事件注册等等 onStart:在onCreate方法之后调用,用于显示界面,但用户还不能进行交互 onRestart:当一个stoped状态的Activity被返回时调用,之后再调用onStart进入运行状态 onResume:在onStart之...

chen_xiaoke的博客 4688

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1673

STM32实战:如何快速移植野火PID调试助手协议到你的电机控制项目

本文详细解析了如何将野火PID调试助手协议快速移植到STM32电机控制项目中。通过深度剖析协议帧格式、数据解析逻辑及环形缓冲区应用,提供了从工程结构规划、核心函数适配到串口中断集成的完整移植步骤。文章还分享了协议健壮性增强、数据上报频率优化等高级调试技巧,帮助开发者构建稳定可靠的上位机调试通道,大幅提升PID参数整定效率。

weixin_29171129的博客 468

Intent和Intent Filters

Intent主要包含Componet name、Action、category、data、type、Extras以及flag。 Componet name        启动一个组件最直接的方式就是通过Componet name,也就是组件名称,它是一个ComponentName对象,指定组件可以通过一下几种方式: setComponent(ComponentName)   ...

jguangyou的专栏 180

【Autosar从入门到精通到进阶实战篇】75 0x34/0x36/0x37:请求下载、传输数据、请求退出——刷写流程的“三兄弟”

文章摘要:UDS刷写流程0x34/0x36/0x37关键实现要点 本文通过一个真实ECU变砖案例,揭示了UDS刷写服务(0x34请求下载、0x36传输数据、0x37请求退出)的实现陷阱与最佳实践。核心要点: 安全架构设计: 0x34阶段只协商参数,不立即擦除Flash 采用缓冲区暂存数据,避免频繁写Flash 严格检查地址对齐和内存边界 关键改进措施: 实现数据包序列号校验(防错位) 传输层缓冲区溢出保护 0x37阶段必须包含完整性校验(如CRC32) 一次性批量写入Flash,减少擦写次数 典型错误模式:

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 72

intent,Intent-filter的概念和作用

1、Intent的概念及作用 Intent——意图,它可以带有数据,在Android设备上的任何应用程序组件间相互作用,将不同组件连在一起的桥梁。 Intent作用: Intent最常用在启动新的Activity,不管是显式的(通过指定类来加载)还是隐式的(通过请求在一块数据上执行的动作)。Intent还可以用来广播消息,然后使用Broadcast Receiver来监听并响应这些Int

无聊的专栏 9663

【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中)

你是否在全网苦寻【图像去噪(ImageDenoising)】的相关资料?你的目标是否是看懂【图像去噪(ImageDenoising)】的相关论文,复现代码,跑出结果,并试图创新?你是否需要发表【图像去噪(ImageDenoising)】的相关论文毕业?你是否需要做【图像去噪(ImageDenoising)】的相关项目,开发软件,研究算法,获得专利或者软著?只要是与【图像去噪(ImageDenoising)】有关的问题,那么请继续往下看。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 2万+

看完这篇你就能讲解LLC软开关:一文秒懂 ZVS 和 ZCS 到底啥意思!

想要 MOS 管ZVS 好实现➜ 把工作频率保持在 fr1 或更高。想让整流二极管也ZCS 实现➜ 频率就别高过 fr1。设计磁性元件时,一定要计算好 Lr、Lm、Cr 的值,这直接决定你 fr、fr1 是多少!LLC 的软开关技术不是“魔法”,是电感电容+频率控制的精妙组合;fr1 就像黄金分割点,整流和开关都能“刚刚好”;不是所有软开关都能同时实现,要看你在频率曲线的哪一段!

weixin_43199439的博客 1546

第5章 使用Intent和IntentFilter进行通信

本章主要介绍Android系统中Intent的功能和用法,当Android应用需要启动某个组件时,总需要借助于Intent来实现。Android使用Intent封装了应用程序的“启动意图”,但这种“意图”并未直接与任何程序组件耦合。本章重点在于掌握Intent的各种属性的功能和用法,和在AndroidManifest.xml文件中配置元素。摘了一些关于Intent的实际应用,从这些小应用来实际掌握Intent;末尾的问题关于MIME,查阅了一些资料增加了解。

hejiero的专栏 2096

《大数据最全面试题-Offer直通车》目录

做好这些不用担心试用期不通过:程序员入职新公司如何快速上手项目本人遇到大数据面试题和参考答案(超过1万字精华版)大数据面试英文自我介绍参考(万字长文)大数据运维应用场景面试题汇总及参考答案(持续更新)万字数据仓库面试题及参考答案数据仓库数据质量监控和处理方法最佳实践数据仓库建模方法万字详解Doris的3种数据模型详解和数据仓库每一层的模型选用大数据面试临阵磨枪不知看什么?看这份心理就有底了-大数据常用技术栈常见面试100道题最全Hive面试题2024年(2万字详解)Elasticsearch 面试题及参考答

大模型大数据攻城狮的专栏 2650

解读Android之Intents和Intent Filters

在Android中,Intent是系统各组件(或应用程序)之间进行数据传递的数据附载者。本节内容主要包括:Intent有两种类型(显式和隐式),Intent重要属性(行为,数据,类别,flags等属性),强制使用程序选择器,延迟Intent,intent解析(三大检测)

sywyg 7万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android Intents和Intent Filters详解

Android应用中的三个核心组件:Activities,Services和broadcastreceivers都是通过称为“Intent”的消息来激活的。Android应用一个特点是“低耦合”,各个Activities,Services和broadcastreceivers相当独立,可以看成是一个个“迷你应用”,而Intent是这些“迷你应用”的粘合剂,Intent不但可以用于同一个Applic

引路蜂移动软件 5130

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Intents和 Intent Filters详解

Intent是一个消息对象,您可以使用它请求另一个应用程序组件执行特定动作。Intent有三个基本使用场景: 1、 用于启动一个Activity: 您可以通过传递一个Intent到startActivity()或startActivityForResult()来启动另一个Activity。Intent用于描述要启动的Activity,及携带一些必需的数据。 2、 用于启动一个Servic...

jennyliliyang的博客 1859

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

无涯教程-Android - Intents/Filters

Android Intent 是要执行的操作的抽象描述。它可以与 startActivity 一起启动Activity,将 broadcastIntent 发送给任何BroadcastReceiver组件,并与 startService(Intent)或bindService(Intent,ServiceConnection,int)与后台服务进行通信。

无涯教程 1356

Intents and Intent Filters详解

Intents and Intent Filters详解(以下蓝字可以点击如果没有反应,本编没有更新) 一个Intent 可以从其他app组件请求一个action,尽管一个intent在不同的组件中可以有多种方式进行交流,这里有三个基本的使用例子 To start  an activity(实例) 直接启动:一个Activity代表一个屏幕,你可以用startAc

OP1234554321的专栏 928

Intents 和 Intent Filters (1)

1 前言 在Android 中,intent 的用途是比较广泛的,可以用来开启 activity 、开启 services 、开启 broadCast ,并且在开启这些组件的同时传递数据。IntentFilter 则是定义在清单文件AndroidManifes.xml 中用来匹配组件可以接收哪些intent。 今天就按照 官方API Guides 中的内容,解读intent 和 Intent Fi...

CnPeng 309

android intent包装,Android之Intents 和Intent Filters

1. Intents 和Intent Filtersto start an ActivitystartActivity or startActivityForResultsto start a servicestartService or bindServiceto deliever a broadcastsendBroadcast, sendOrderedBroadcast or sendSti...

weixin_33130645的博客 435
上一篇: Android简明开发教程六:用户界面设计
下一篇: Android简明开发教程八:引路蜂二维图形绘制实例功能定义
引路蜂
博客等级 码龄16年 3122粉丝 711原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值