Android之Intent详解

Android开发Intent详解 本文详解Android开发Intent。 阅读详情

From:http://www.eoeandroid.com/thread-78484-1-1.html

 

Activity、Service和Broadcast Receiver这些核心组件之间通过消息激活,这个消息就是Intent。

       Intent消息可用于当前运行时同应用内部的组件之间或者不同应用的组件之间通信。Intent自身,即一个Intent对象,包含说明一个执行 操作的抽象数据结构,传递给执行操作的组件,或者,常见于broadcast的情况,该数据结构用于描述正在执行或者已经发生的事情。

       针对组件类型不同,发送Intent有不同的机制:
       针对Activity,Context.startActivity()方法传递Intent,启动一个新的Activity,或者 Activity.startActivityForResult()方法启动新的Activity做完事情后返回到本Activity来;
       针对Service,Context.startService()方法,用于创建一个Service或者传递给已经运行Service一个指 令,于此类似,Context.bindService()建立当前组件和Service之间的连接,可选的,如果该Service未运行,可以创建新的实例;
       针对Broadcast Receiver,可通过:Context.sendBroadcast()、Context.sendOrderedBroadcast()或者 Context.sendStickyBroadcast()方法发送Intent给所有感兴趣的broadcast receiver。
在以上各种情况下,Android系统找到适合响应该Intent的activity、service或者broadcast service集合。不会出现重叠现象,即,broadcast intent只会发送给broadcast receiver,而不会发送给Activity或者Service。

       Intent对象
       Intent对象可绑定一组信息:
       接收intent的组件需要的信息,比如需要调用系统照相机Activity,要告知它照片存放的路径;
       Android系统需要的信息,比如那个种类的组件可以处理这个Intent,在比如,告知如何启动Activity(比如要求它在哪个task中)。

       Intent对象主要包含以下内容:
       componnet name,组件名称,可处理这个Intent的组件名称。组件名称是可选的,如果填写,Intent对象会发送给指定组件名称的组件,否则,也可以通过其他Intent信息定位到适合的组件。组件名称是个ComponentName类型的对象,该对象又包括:

       目标组件完整的类名,比如:com.example.project.app.FreneticActivity;
       在manifest文件中设置的包名,组件的包名和manifest中定义的包名可以不匹配。
       action,命名动作的字符串,用于执行动作,或者,在广播的情况下,表示发生的或者要报告的动作。 Intent类定义了一组action常量,见API的Intent.ACTION_*。这些是Intent类预制的一些通用action,还有一些 action定义在android其他API中。用户可以定义自己的action字符串常量,用于激活自己的应用组件。这需要把应用的包名作为该字串的前 缀,比如:com.example.project.SHOW_COLOR。action名称很像java调用的方法名,下面提到的data和extra 类似参数和返回值。

       data,起到表示数据和数据MIME类型的作用。不同的action是和不同的data类型配套的。比 如,action是ACTION_EDIT,那么data要包含要编辑的文档URI。如果action是ACTION_CALL,data可能是tel: 前缀后面跟电话号码,在比如action是ACTION_VIEW,data是http:开头的URI,则应该是显示或者下载该uri的内容。在匹配 intent到能处理该组件的过程中,data(MIME类型)类型是很重要的。比如,一个组件是可以显示图片数据的而不能播放声音文件。很多情况 下,data类型可在URI中找到,比如content:开头的URI,表明数据在设备上,而且有content provider控制。但是有些类型只能显式的设置。setData()方法只能设置data的uri,setType()可设置MIME类 型,setDataAndType()即可设置URI也可设置MIME类型。

       category,包含处理intent组件种类的额外信息。对一个Intent可以设置任意多个category描述,和cation类似,Intent类预制了一些category常量,Intent.CATEGORY_*。

       extras,可以看作一个Map,通过键值对,可为处理Intent组件提供一些附加的信息。可通过put..()和get..()存取信息。也可以获取Bundle对象,然后通过putExtras()和getExtras()方法存取。

       flug,用于多种情况,在intent增加flug,比如可以指示Android如何启动一个activity,比如是否属于或者不属于当前task,以及,处理完毕后activity的归属。这些flag都定义在Intent类的常量中。

       Intent解析
       intent的投递,有两种方式:
       显式的设定目标组件的component名称。不过有时开发者不知道其他应用的component名称。显式方式常用于自己应用内部的消息传递,比如应用中一个activity启动一个相关的service或者启动一个姊妹activity;
隐式intent,component名称为空的情况。这种方式往往用于激活其他应用中的组件。

       android投递一个显式的intent,只需找到对应名称的组件即可。
       隐式的intent需要用到不同的策略。android需要找到处理这个intent的最合适组件(集合)。要通过intent filter,比较intent对象和组件关联结构。filter根据组件的能力决定他们能处理哪些intent。android系统打开合适的组件处理 相应的隐式intent。如果组件不包含任何intent filter,那只能接收显式的intent。带filter的组件既可接收隐式intent也可接收显式的。

      Intent有三个方面可用于intent filter:
       action
       data,包括URI部分和数据类型部分
       category
       extra和flag在这方面不起作用。
       Intent filter
       为了能支持隐式intent,activity、service和broadcast receiver会包含1到多个intent filter。每个intent filter描述组件的可接收一组intent的能力。在intent filter中,说明了可接受的类型,以及不想要的intent。隐式的intent要想投递到一个组件,只需通过组件的一个filter即可。

       组件把filter分成多个,是为了针对具体不同的任务。在sample中的Note pad示例中,NoteEditor activity有两个filter,一个用于启动并打开指定的note,另一个是为了打开新的空的note。

       一个intent filter是一个IntentFilter类的实例。但是,android系统必须在组件未启动的情况下就知道它的能力,因此intent filter一般不会在java代码中设置,而是在应用的manifest文件中作为元素的方式声明。一个例外是,为broadcast receiver注册动态的filter,可以调用Context.registerReceiver()方法,通过直接实例化IntentFilter 对象创建。

       filter有三个平等的部分:action、data和category。隐式intent将测试这三个部分。一个intent要想投递到一个组件,那么这三个测试都要通过才行。当然如果组件有多个intent filter,可能一个intent没有通过,但是通过了另外的一个,这样也可以把intent投递到组件。

       action测试
       在intent filter中可以包含多个action,比如:

java代码:

  1. <intent-filter>
  2. <action android:name="com.example.project.SHOW_CURRENT" />
  3. <action android:name="com.example.project.SHOW_RECENT" />
  4. <action android:name="com.example.project.SHOW_PENDING" />
  5. </intent-filter>
             要想通过测试,intent中的action名称要匹配其中之一。
           如果intent filter中不包含action列表,而intent指定action,那么intent没有匹配的action,不通过;intent未指定action,而intent filter指定,会自动通过测试。

           category测试
           在intent filter中可包含category列表:

java代码:
  1. <intent-filter>
  2. <category android:name="android.intent.category.DEFAULT" />
  3. <category android:name="android.intent.category.BROWSABLE" />
  4. </intent-filter>

android+音乐节拍检测,科学网—音乐节拍跟踪或音乐节拍检测软件,LilyBeats alpha - 石自强的博文... 我们设计并实现了一种用于实时跟踪音乐节拍的软件。该软件可以用于智能灯方案提供商,为其提供灯光随音乐变化的核心解决方案。首先给出软件的下载链接:或者音乐节拍是乐曲中表示固定单位时值和强弱规律的组织形式,亦称拍子。它有两个特性:周期性和连续性。节拍周期性表现为节拍结构,是乐曲中周期性出现的节奏序列。节拍连续性表现为音乐的平均速度,其单位为bpm(beat per minute每分钟音乐节拍的个数)。音... 阅读详情

相关推荐

Revit Dynamo实战:用Excel数据批量生成桥梁模型(附自适应族技巧)

本文详细介绍了如何利用Revit Dynamo结合Excel数据实现桥梁参数化建模,重点讲解了数据驱动建模、自适应族优化及大型项目性能管理三大核心技巧。通过结构化Excel数据、高级自适应族创建和分块处理策略,显著提升桥梁建模效率与设计变更响应能力。

weixin_42520025的博客 387

android service 获取 intent,Android 中的 IntentService 类详解

Android 中的 IntentService 类详解简介、与 Service 的区别IntentService 继承至 Service ,所以 Service 的特点 IntentService 也全部拥有。首先,我们看一下 Service 的一些问题:Service 默认运行在主线程,不能执行耗时操作;如果要在 Service 中执行耗时的操作,需要在 Service 中创建新的线程,但是这...

weixin_42116791的博客 1742

HHD Device Monitoring Studio:破解版在串口调试中的实战应用

本文详细介绍了HHD Device Monitoring Studio破解版在串口调试中的实战应用,包括安装指南、串口监控功能解析、Modbus RTU协议分析案例以及自定义协议解析技巧。通过具体操作步骤和性能优化建议,帮助开发者高效完成端口监控和调试任务,提升工作效率。

weixin_29268331的博客 940

Android学习_Intent传参取参

在 Kotlin 中,当你使用 Android 开发并传递参数给一个新的 Activity 或 Fragment 时,你会在 Intent 或 FragmentTransaction 中设置这些参数。如果你想在 Fragment 之间传递参数,你通常会在创建该 Fragment 的 FragmentTransaction 中使用 arguments。在 DetailActivity 中,你可以在 onCreate 方法中从 Intent 中获取这些参数。在 Fragment 中获取参数。

weixin_37869779的博客 983

蓝桥杯嵌入式(基础教程)STM32G431RBT6——创建工程以及点灯

首先选择正确的芯片类型:STM32G431RBT6工程的创建主要有配置时钟以及烧录的方式。在配置好之后需要对时钟进行配置,由于蓝桥杯的外部晶振是24MHz因此需要对时钟树进行相应的配置。第一步先点击时钟配置之后就可以对时钟进行相应的配置了最后一步,需要对工程起一个名字,并且要选择KEIL做为其相应的软件之后再需要再生成代码那里进行相应的控制。当然这样根据生成的工程不能直接使用会有一个报错,所以需要添加一个启动文件。这个启动文件可以在官方的LCD文件夹下复制到自己的工程中。

m0_74051113的博客 1093

ArcGIS中如何计算多个点到特定线的最短距离

现有一个点图层和一个面图层,怎么来计算这些点到这个面图层,两个面的公共边的最短直线距离呢? 1.首先得将两个图层都转为 投影坐标系 打开工具箱-数据管理工具-要素-面转线 ​ ​ 2.将面图层设为输入要素 注意要将“识别和存储面邻域信息”勾选 ​ 3.面转线成功后 打开线属性表,线图层拥有了 LEFT_FID和RIGHT_FID两个字段 ​ 4.按属性选择,表达式中输入 “LEFT_FID”<>-1 即可选出两个面的公共边 ​再将选...

GIS蒲公英的博客 6715

安卓基础知识:Intent解析

用于描述应用的动作及其对应数据①指定当前组件需要做的动作 ②在不同组件之间传递数据(Activity、Service、BroadcastReceiver)显式意图 在intent初始化时直接显式传入所需数据 隐式意图 通过action、category、data匹配隐式获取到AndroidManifest中设置好的内容 具体使用在Activity分析中用到putExtra()、Bundle①8大基本数据类型 ②Intent、Bundle ③Serializable对象、Parcelable对象、CharSe

MagicSound的博客 847

配置oem 13c以监控管理数据库

使用oem13c监控数据库

雅冰石的专栏 1811

Android 获取Intent里面所有内容

今天需要获取一个Intent里面的内容,但又不知道key是多少。后来找了一下,bundle.keySet()方法可以返回一个key,就用循环返回所有的key,每个key里面的内容都取出来。 public void showBundleData(Bundle bundle) { String string = "Bundle{"; for (String key : bundle.keySet()) { string += " " + key + " =

weixin_40677490的博客 3156

玩转Docker小游戏项目系列:Docker部署魔塔网页经典小游戏

玩转Docker小游戏项目系列:Docker部署魔塔网页经典小游戏

jks212454的博客 1063

智能筛选栏 SmartFilterBar 全面解析与实战指南

SmartFilterBar 把复杂的检索界面“模板化”,让开发者聚焦业务逻辑与后端数据质量,而非 UI 小细节。通过精准运用 CDS 注解与 OData 元数据,它能在几毫秒内拼装出专业级筛选体验;结合事件钩子与控制配置,又足以满足极端个性化需求。拥抱 SmartFilterBar,意味着在 Fiori 生态中以最少代码赢得最快价值交付——这正是现代企业应用开发追求的极致效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 404

安卓——Intent(实现页面跳转的两种方法)

下图中两个不同的方法就是两种页面之间跳转的情况1&gt;跳转不返回数据2&gt;跳转返回数据实例:第一种启动方式(跳转不返回数据)第二种启动方式(跳转返回数据)先看第一种:点击第一种启动方式按钮会出现右边的图,然后再点击Button按钮返回左边的界面,TextView中的内容没变。再看第二种启动方式不同的是,点击Button按钮返回左边的界面,TextView中的内容变成了你好。下面是所有代码An...

weixin_38199770的博客 7万+

Python全栈入门到实战【JavaScript篇 15】async/await与Fetch API,打通前后端数据通道

Fetch API是浏览器内置的现代HTTP请求接口,用于向服务器发送请求并获取响应。它是(XHR)的替代品。学习Fetch的目标非常明确——用JS从后端API获取数据,并渲染到前端页面。这标志着前后端数据通道的打通,是实现全栈开发的核心技能。try {// 等待Promiseconst parallel = await Promise.all([ // 并行等待]);

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1981

Android安卓-Intent.setFlags用法,详解。

转载记录 原文地址: [https://blog.youkuaiyun.com/berber78/article/details/7278408

ruiruiddd的博客 4740

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

安卓Intent 详解

欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3959204.html 【正文】 Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要。 一、什么是Intent 1、Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间...

rainbowcode的博客 9308

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android Intent详解

一、关于intent   Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Se

z690798364的专栏 731

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android快速入门之Intent使用详解

Intent是由action(动作)、data(数据)、类型(type)、component(组件)、Flags(标记)和Extra(扩展信息)等内容组成,每个组成都由相应属性进行表示,并提供设置和获取相应属性的方法。 Intent可以用来进行活动间的数据传递,我们可以直接通过调用Intent的putExtra()方法和getXxxExtra传递简单的数据或者,使用其他方式传递更复杂数据。

龙源IT 的博客 2059

安卓学习140502:android Intent机制详解

Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android

feifei2211的专栏 654

【Android】Intent类详解

Intent在Android开发中扮演着至关重要的角色,它是用于在不同组件(如Activity、Service、BroadcastReceiver等)之间进行通信和交互的核心对象。

qq_52924376的博客 5029

Android Intent详解

Android核心知识点---Intent,书里不清楚的这里都有

一条屈依的博客 1705

Android中Intent用法详解

Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的 **Activity / Service**之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

qq_41466437的博客 982

Android中的Intent详解

前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面。因为每一个Acticity的任务不一样,所以经常互在各个Activity之间进行跳转,在Android中这个动作是靠Intent来完成的。你通过startActivity()方法发送一个Intent给系统,系统会根据这个Intent帮助你找到对应的Activit

Cwuhao的专栏 3645

Android Intent 使用及其详解

Intent是Android系统用来抽象描述要执行的一个操作,也可以在不同组件之间进行沟通和消息传递。Intent意图可以是明确的指定组件的名称,这样你可以精确的启动某个系统组件,比如启动一个Activity。它也可以是模糊的,没有指定组件名称,只要是能够匹配到这个Intent的应用都可以接收到,比如发送一个拍照Intent,所有的拍照应用都会响应。

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 4676

详解Intent —— 移动应用开发(安卓)

Intent(意图)是安卓系统中用于描述操作请求的对象。它本质上是一个消息传递机制,告诉系统需要执行什么操作以及相关的数据。例如,启动一个新的 Activity、发送广播或启动服务都可以通过 Intent 实现。目标组件:要启动或交互的组件(如某个 Activity 或 Service)。操作类型:要执行的操作(如查看、编辑、拨号)。数据:与操作相关的数据(如 URI、额外参数)。其他元数据:如类别、标志等,用于进一步描述意图。

Geek极安云服官方博客 1617

android intent 机制,Android Intent详解

一、什么是Intent1、Intent的概念:Android提供了Intent机制来协助应用间的交互与通讯,Intent不仅可以应用于应用程序之间,也可以应用程序内部的activity、server、broadcastreceive之间。 Intent:目的,意图Intent是一种运行时绑定机制(runtime binding),他能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序...

weixin_30270475的博客 634
上一篇: Android之Intent详解
下一篇: Android手机铃声代码实现
ehlxr
博客等级 码龄16年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值