AndroidUI高级之十六使用Intent进行通信
本章内容
Intent详解调用系统程序使用Intent实现组件间数据传递定制Intent
Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。Android的三个基本组件——Activity,Service和Broadcast Receiver——都是通过Intent机制激活的,不同类型的组件有不同的传递Intent方式。要激活一个新的Activity,或者让一个现有的Activity做新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法,要启动一个新的Service,或者向一个已有的Service传递新的指令,调用Context.startService()方法或者调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。
Intent称为意图,用于描述一次操作的动作、参数以及附加的数据,用于很多地方,可以理解类似于网页之间的超链接。
•查看某联系人的资料•发邮件给某个人•给某人打电话Android会根据Intent寻找到相应的组件并传入Intent执行Intent可以在如下动作时被传入
•Content.startActivity()•Content.startService()•Content.sendBroadcast()
Android中的组件需要在AndroidManifest.xml中注册才能被调用•通过intent-filter进行注册
•Action:用来指明要实施的动作是什么,比如说ACTION_VIEW, ACTION_EDIT等•Data: 要事实的具体的数据,一般由一个Uri变量来表示•Category:一个字符串,包含了关于处理该intent的组件的种类的信息。一个intent对象可以有任意个category。intent类定义了许多category常数•Type:显式指定Intent的数据类型(MIME)•component:指定Intent的目标组件的类名称•extras:附加信息
几种常见的Action如下:
名称
|
描述
|
ACTION_CALL activity
|
启动一个电话
|
ACTION_EDIT activity
|
显示用户编辑的数据
|
ACTION_MAIN activity
|
作为Task中第一个Activity启动
|
ACTION_SYNC activity
|
同步手机与数据服务器上的数据
|
ACTION_BATTERY_LOW broadcast receiver
|
电池电量过低警告
|
ACTION_HEADSET_PLUG broadcast receiver
|
插拔耳机警告
|
ACTION_SCREEN_ON broadcast receiver
|
屏幕变亮警告
|
ACTION_TIMEZONE_CHANGED broadcast receiver
|
改变时区警告
|
•ACTION_CALL所对应的Data通常是“tel:”开头的•ACTION_VIEW对应的Data通常是“http:”开头的
•setData() 只能设置URI•setType() 只能设置MIME Type•setDataAndType() 可以设置URI或MIME Type
•CATEGORY_BROWSABLE•CATEGROY_HOME•CATEGORY_LAUNCHER
•addCategory()•removeCategory()
•可以随意设置多对键值对•这个属性与Android匹配Intent无关•Intent提供了多个相对的get……方法和set……方法用于读写数据•当传入到组件中时,通过Bundle的getExtras可以获得数据
<span style="font-family:SimSun;font-size:14px;">//发送MMS
Uri uri = Uri.parse("content://media/external/images/media/23");
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra("sms_body", "some text");
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType("image/png");
startActivity(it);
</span>
1、调用者生成Intent对象,并设置相关属性2、向Android提交Intent请求3、Android对Intent进行解析,找到相应的组件执行
<span style="font-family:SimSun;font-size:14px;">Uri uri = Uri.parse( "http://www.google.com");
Intent it = new Intent(Intent.ACTION_VIEW,uri); </span>
<span style="font-family:SimSun;font-size:14px;"> Uri uri = Uri.parse( "geo:38.899533,-77.036476" ); Intent it = new Intent(Intent.Action_VIEW,uri);
</span>
<span style="font-family:SimSun;font-size:14px;"> Uri uri = Uri.parse( "tel:xxxxxx" ); Intent it = new Intent(Intent.Action_DIAL,uri);
</span>
<span style="font-family:SimSun;font-size:14px;"> <uses-permission android:name="android.permission.CALL_PHONE"/>
</span>
<span style="font-family:SimSun;font-size:14px;">Intent it = new Intent(this, SettingActivity.class);
it.putExtra(“username”, “root”);
startActivity(it);
</span>
<span style="font-family:SimSun;font-size:14px;">Intent it = getIntent();
String username = it.getExtras().getString(“username”);
</span>
<span style="font-family:SimSun;font-size:14px;">startActivityForResult (intent, REQUEST_CODE);</span>
<span style="font-family:SimSun;font-size:14px;">protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == REQUEST_CODE) {if(resultCode == RESULT_OK) {data.getExtras().getString(“someresult”);}}
}
</span>
<span style="font-family:SimSun;font-size:14px;">Bundle bundle = new Bundle();
bundle.putString(“someresult”, “somevalue”);
bundle.putString(“otherresult”, “othervalue”);
Intent it = new Intent();
it.putExtra(bundle);
setResult(RESULT_OK, it);
finish();
</span>
•由于另一个项目的Activity不属于当前项目,不能得到Class•所以我们希望能够通过隐式Intent的方式启动•这时就需要对Action等属性进行自定义
•并在Intent中使用这些自定义属性
•首先在AndroidManifest.xml中使用Intent-Filter自定义各种属性•然后在启动Activity时,在Intent中使用自定义属性
转载于:https://www.cnblogs.com/mjsn/p/6150826.html
AndroidUI高级之十六使用Intent进行通信相关推荐
- 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 谷粒商城 高级篇 (十六) --------- 社交登录
目录 前言 一.OAuth 2.0 二.微博登陆准备工作 三.整合微博登录 1.引导用户到如下地址 2. 授权登录后进入回调函数 3. Session共享问题解决 ① session复制 ② 客户端存 ...
- 实验十六VLAN,VLANIF通信
1.通过VLAN,VlANif实现全部的PC互通 2.将二层交换机连接PC的接口设为access,连接核心交换机的的接口设为trunk,核心交换机的接口也设为trunk并且允许所有vlan通过,这样V ...
- 软考高级系统架构设计师系列论文三十六:论基于构件的软件开发
软考高级系统架构设计师系列论文三十六:论基于构件的软件开发 一.摘要 二.正文 三.总结 一.摘要 本文以我主持的某商业银行交易监控分析系统项目为实例,探讨了作为开发方公司基于构件技术开发项目碰到的问 ...
- MySQL高级知识(十六)——小表驱动大表
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...
- 2021年大数据Hadoop(二十六):YARN三大组件介绍
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...
- 第十六届全国大学生智能车竞赛技术报告 | 单车拉力组- 上海海事大学-骑摩托的蒙娜丽莎
简 介: 本文设计的智能车系统以 STC16F40K128微控制器为核心控制单元,通过车体前方的电感检测赛道电磁信息,通过编码器检测智能车的实时速度,利用陀螺仪检测小车姿态,使用PID 控制算法调节电 ...
- 第十六届全国大学智能车全国总决赛竞赛闭幕式
正式文档将会在竞赛网站公布: smartcar.cdstm.cn §01 组委会扩大会议 第十六届全国大学生智能车智能车竞赛组委会将在8月24日晚上8:00召开第四次扩大会议,这也是本次比赛的最后一次 ...
- 第十六届全国大学生智能汽车竞赛安徽赛区赛事指南
主办单位:安徽省教育厅 中国自动化学会 承办单位:安徽中医药大学 合肥工业大学 中国 合肥 2021年7月 §01 赛事简介 全国大学生智能汽车竞赛起源于韩国,是韩国汉阳大学汽车控制实验室在飞思卡 ...
最新文章
- 第一个使用计算机图形学术语,计算机图形学考题
- Ueditor配置及在项目中的使用
- HTML DOM Event 对象
- Sprint会议记录(第五组)
- mysql 5.7 备份innodb_mysql5.7 innodb数据库备份工具Xtrabackup的安装
- substring not found什么意思_英文写作中,除了not,你还会其他否定表达吗?
- 只进ResultSet 不支持请求的操作
- 程序的装入和链接过程
- 螺旋矩阵c++语言_一起刷 leetcode 之螺旋矩阵(头条和美团真题)
- postman压力测试_如何用Postman简单做接口自动化
- 完全掌握AS中点(.)语法的应用
- php curl模拟post请求提交数据
- xp也可以将U盘格为NTFS
- java三大特性之—封装
- 爬取CSDN博客文章,统计文章历史数据
- 商务办公软件应用与实践【8】
- 百度脑图打开本地xmind文件的方式
- 基于JAVAWeb美食网站设计计算机毕业设计源码+数据库+lw文档+系统+部署
- Verilog专题(二十五)Lemmings4
- 纸上得来终觉浅,决知此事要躬行
热门文章
- ReactJS实用技巧(1):JSX与HTML的那些不同
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
- android权限检查
- hdu 1171 dp(多重背包)
- LeetCode(883)——三维形体投影面积(JavaScript)
- java web空指针,java - Web服务中的Java空指针异常@autowired [重复] - 堆栈内存溢出
- 很想去摆地摊,可是不知道怎么开始,前期需要做什么准备工作吗?
- htaccess文件是什么
- 楼对面的男士夏天就光膀子,请问大家,男士真的都爱光膀子吗?
- 荣耀v20、荣耀20Pro、mate20、Nova5Pro选哪个?