Android通信篇

在Anroid中,通信技术包括多个层面,在UI层设计多种事件(如触控事件、案件事件、轨迹球事件等);在框架层设计Intent、Meaage等;在内核层则涉及Bundle、RPC、共享内存等技术。本章将重点介绍UI层和框架层的通信机制。

1.Intent通信

Intent通信实际上是对Open-Binder通信机制的封装。在Linux中,存在D-Bus和open-Binder两种进程间通信机制,其中D-Bus应用得更广泛。但在Android中,采用的是open-Binder通信机制,D-Bus只在开源BT协议栈BlueZ中得到应用。

每个Intent消息可以由component、action、data、category,extras、flags等几个属性构成。

按是否有返回值Intent通信可以分为有返回值和无返回值通信,按接收对象可以分为群发消息和个体消息。

但在通常情况下,Intent仅能传递基本的数据类型,对于复杂的数据类型,则要借助Serializable、Parcelable两个接口进行。

(1)Intent常用用法

下面针对网络、地图、电话、消息、电子邮件、多媒体、系统等几个方面介绍Intent的常见用法。

1)网络相关

为了使用网络功能,需要拥有android.permission.INTERNET权限。与网络相关的常用Intent通信包括显示网页、Google地图、搜索等。

在由HTTP定义的与服务器交互的方法中,发起请求的方式有两种,即GET和POST,其中GET方式通过RUL提交数据,数据在URL中可以看到,无法保证私密性,且提交的数据最多只能为1024字节;而POST方式是将数据放置在HTML HEADER中提交,且在数据长度上没有限制,通常用于传递敏感数据。

在Intent中目前尚不支持POST方式提交数据,仅支持GET方式。为了打开网址,其采用的ACTION为ACTION_VIEW,方法如下:

Uri uri=Uri.parse("http://www.163.com:);

Intent it=new Inent(Intent.ACTION_VIEW,uri);

startActivity(it);

如果希望传递敏感数据,在WebView中采用的方法如下:

public void postUrl( String url, byte[] postData);

在众多的应用中找到自己想要的应用。就需要用到搜索功能。实现搜索的方法如下:

Uri uri=Uri.parse("market://seatch?q=pname:com.miaozl.hello");

Intent intent=new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

在网络中搜索相关信息,实现的方法如下:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY, "android123")

startActivity(intent);

2)地图相关

为了显示Google地图,需要提供地理位置的经纬度信息,注意,在进行定位时,由于定位算法的原因,移动终端至少要能捕获3颗卫星的数据,才能提供基本的定位,根据GPS芯片的性能和场景的不同,实际GPS芯片能捕获到的卫星数量差异较大,下面是显示Google地图的方法:

Uri uri=Uri.parse("geo:38.899533, -77.036476");

Intent it=new Intent(Intent.ACTION_VIEW,uri);

startActivity(it);

采用GPS导航的目的通常在于希望能找到两点间的最佳路线,这种查找最佳路线的过程在数学上称为路径规划,下面是GoogleMap路径规划的方法:

Uri uri=Uri.parse(http://maps.google.com/maps?f=d&saddr=srartLat%20startLng&daddr=engLat%20endLng&hl=en);

Intent it=new Intent(Intent.ACTION_VIEW,uri);

startActivity(it);

3)电话相关

作为移动终端最基本的功能,通话自然是必不可少的,与通话相关的还有电话薄等功能,下面是进入电话薄的方法:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(People.CONTENT_URI);

startActivity(intent);

如果希望查看具体的联系人,需要制定相关联系人的ID,方法如下:

Uri personUri=ContextUris.withAppendedId(People.CONTENT_URI,ID);

Intent intent=new Intent();

intent.setAction(Intent.ACTION_VIRW);

intent.setData(persionUri);

startActivity(intent);

时间: 2024-11-09 06:52:25

Android通信篇的相关文章

Android启动篇 — init原理(一)

========================================================          ======================================================== =              [原创文章]:参考部分博客内容,学习之余进行了大量的筛减细化分析                          =          =                          [特殊申明]:避讳抄袭侵权之嫌疑

[android架构篇]mvp+rxjava+retrofit+eventBus

android架构篇 mvp+rxjava+retrofit+eventBus 高层不应该知道低层的细节,应该是面向抽象的编程.业务的实现交给实现的接口的类.高层只负责调用. 首先,要介绍一下一个项目中好架构的好处:好的软件设计必须能够帮助开发者发展和扩充解决方案,保持代码清晰健壮,并且可扩展,易于维护,而不必每件事都重写代码.面对软件存在的问题,必须遵守SOLID原则(面向对象五大原则),不要过度工程化,尽可能降低框架中模块的依赖性. 之前的一段时间,学习了一些新的技术,并把自己关注的技术整合

Android 性能篇 -- 带你领略Android内存泄漏的前世今生

基础了解 什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是指由程序分配的内存但是由于程序逻辑错误而导致程序失去了对该内存的控制,使得内存浪费. Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是 静态分配 . 栈式分配 和 堆式分配 ,对应的三种存储策略使用的内存空间主要分别是 静态存储区(也称方法区) . 栈区 和 堆区 . ?? 静态存储区(方法区):主要存放 静态数据 . 全局

Android总结篇系列:Activity Intent Flags及Task相关属性

同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 -------------------------------------------------------------------------- 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大

Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能

定位+移动选址 百学须先立志-学前须知: 我们经常在各大主流APP上要求被写上地址,如百度外卖.爱鲜蜂收货地址等等:其中他们大多数是可以让我们在地图上移动选址.就如下面这段GIF演示的一样: 尽信书,不如无书-能学到什么? 1.地图状态MapStatus类及监听setOnMapStatusChangeListener 2.定位LocationClient类 3.反地理编码GeoCoder类 工欲善其事必先利其器-申请Key 百度地图访问应用(AK)申请地址:http://lbsyun.baidu

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult

android使用篇(四) 注解依赖注入IOC实现绑定控件

在android使用篇(三) MVC模式中提到一个问题: 1) 视图层(View):一般採用XML文件进行界面的描写叙述,使用的时候能够很方便的引入,可是用xml编写了,又须要在Acitvity声明而且实例化,有点麻烦,考虑是否能做一个类似注解实现匹配,或者写一个类获取xml的各个节点然后自己主动进行封装,当然,这仅仅是个想法,以后再实现. 今天最终把这个想法实现了,使用依赖注入IOC注解实现对activity中控件的实例化. 先普及一下java的反射机制和注解机制的知识: 下面引用大神的两篇文

Android系统篇之----编写系统服务并且将其编译到系统源码中

在之前已经介绍了一篇关于如何编写简单的驱动以及访问该驱动的小程序,最后将程序编译到Android内核源码中通过程序访问驱动验证是可以通过的,那么本文就继续这个知识点,把这个驱动程序通过JNI连接创建一个系统服务,提供给上层应用访问改服务功能,可以看到前一篇介绍驱动程序的功能是属于内核层的,而本文介绍的内容是Framework层的知识. 声明:本文内容参考罗升阳的书籍:<Android系统源代码情景分析> 如果想了解更详细的内容非常建议购买此书 非常感谢罗神的这本书,给我带来很多未知的知识,大神

Android总结篇系列:Activity启动模式(lauchMode)

本来想针对Activity中的启动模式写篇文章的,后来网上发现有人已经总结的相当好了,在此直接引用过来,并加上自己的一些理解,在此感谢原作者. 文章地址: http://blog.csdn.net/liuhe688/article/details/6754323 ------------------------------------------------------------------------------------------------- launchMode在多个Activit