基于Android的无线控制系统的设计与实现
智能手机普及率的提升,催生了基于智能操作平台的附加产物。而Android平台为开源的手机开发平台,通过对Android平台的设计开发,使智能手机获得增强化的个性服务。提出了基于Android手机的无线控制系统,介绍了整体结构框架,分析了各功能模块的具体实现,并在实际设备中进行测试。实现了基于Android手机对设备的远程访问和控制。
引言
近年来,智能手机在全球范围内迅速普及。根据市场研究公司尼尔森发布的《2013移动消费者报告》显示,中国智能手机普及率已达到66%,已超越英国和美国的普及率。随着信息科技的快速发展,人们生活水平的提高,对电子产品的功能要求也越来越高。人们希望通过简单方便的操作,对周围设备进行访问控制。Android是一种开源的手机操作系统,具有强大的应用层API和丰富的传感器功能,其开放的平台有利于开发者开发出各类应用软件,增加手机的个性化服务。本文将Android手机与PC端联系起来,介绍了一种基于Android手机的无线控制系统。在该系统中,Android手机利用周边无线通信资源与其他设备进行交互,可进行无线鼠标控制、无线键盘输入、文件传输操作等。
1 Android的系统架构
Android的系统架构采用了由下至上的分层的结构,使下层为上层提供统一的服务。各层各司其职,本层及以下层发生变化不会影响上层,避免了各层的差异,图1是一张公开的关于Android体系结构架构图:
图1 Android的系统架构
从图中可以看出,Android系统分为四个层面,从底层到高层分别是:
Linux核心层(LINUX KERNEL)
Linux核心层负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。Android的核心系统服务依赖于Linux2.6内核,同时作为硬件和软件层之间的抽象层,隐藏了具体的硬件特性,并为上一层提供统一的标准服务。
库(LIBRARIES)和运行环境层(ANDROID RUNTIME)
库和运行环境层包含了标准C函数库Libc、 OpenSSL、SQLite等以及支持游戏开发2D SGL和3D OpenGL|ES,并负责解释和执行生成的Dalvik格式的字节码。核心库提供了Java编程语言核心库的大多数功能。每一个Android应用程序都在自己的进程中运行,并拥有各自独立的Dalvik虚拟机实例。
应用程序框架层(APPLICATION FRAMEWORK)
普通开发这可以使用Android基本应用程序使用的系统API,Android应用框架中的各个模块都可以被复用,各种服务也可以被复用。该层复用机制使用户可以方便的替换程序组件。
应用程序层(APPLICATIONS)
应用程序层内含有Android内置的Google Maps、E-mail、即时通信工具、浏览器等,开发人员开发的程序也将置于该层,并同内置程序有平等的位置,可以相互调用和替换。这类应用基本都是通过Java语言编写的,能够独立的完成某些功能的应用程序。开发人员可使用应用框架提供的API编写自己的应用程序。
2系统实现
设计原理
基于Android手机的无线控制软件主要运用到Socket通信原理。Socket是通信的基本操作单元,主要有两种操作方式:面向连接和无连接。面向连接的Socket操作使用TCP协议,此模式下必须先连接上目的地的Socket,此操作模式下所有所发信息都会在另一端以同样的顺序被接受,安全性高。无连接的Socket操作无需连接一个目的Socket,只做简单的投出数据报,但是操作数据安全性不高[。
综合考虑本设计采用面向连接的Socket操作,在手机端和PC端建立一个Socket连接,当手机端和PC端之间发送不同的命令时,手机和PC机做出不同的响应,并返回响应的数据。
系统的总体工作流程图如图2所示:
图2 系统总体工作流程
PC端作为服务器先运行起来,通过WIFI或蓝牙设备在指定端口处进行监听。随后启动Android端程序,在Android端输入口令和PC端IP地址,并发送给服务器。当服务器接收的口令和IP地址与预置信息相同,验证信息无误后,返回数据信号,此时允许建立连接。现在便可在PC端和Android端进行无线控制,包括命令传送和文件传输。
为了提高响应速度,该系统在多处使用了子线程。此方法避免了事件间的盲等状态,可异步处理不同事件。如果当前没有处理任务,便可将处理器时间让给其他通信任务。提高了程序的运行效率以及CPU的利用率,同时减少服务器响应时间。
Android手机端设计
在Android手机端运行该软件XXX Client后,进入鼠标界面ControlActivity,该界面同鼠标相对应,有左键、滚标、右键。在用该手机进行控制PC端之前,还需对手机进行通信设置,此时进入菜单栏,选择connections,进入连接设置界面,新添加一个WIFI连接。在Android端输入用户名、服务端IP和端口号,通过服务器验证后,便和PC端建立好Socket连接。
当服务端和客户端建立好Socket连接后,他们之间可以相互发送命令和接受命令,目前支持图3中所示的控制命令。
图3 基于Android的无线控制系统支持命令
AuthentificationAction:认证命令。客户端向服务端发送认证的密码。
AuthentificationResponseAction:认证响应命令。服务端验证客户端是否正确的,返回验证的结果。
FileExploreRequestAction:打开文件命令。客户端请求打开服务端文件的命令。客户端发送这个命令请求打开服务端的文件。
FileExploreResponseAction:服务端响应客户端打开文件的命令。
KeyboardAction:键盘命令。
MouseClickAction:鼠标点击命令。
MouseMoveAction:鼠标移动命令。
MouseWheelAction:鼠标滚轮命令。
连接好Android端和PC端后通信,返回至鼠标界面,鼠标点击事件通过客户端发送特定的命令到服务端,触发MouseClickAction事件,服务端通过Java中专门控制鼠标键盘的Robot类[6],将事件发送到Android端,从而实现Android端对PC端鼠标控制。
鼠标滑轮事件MouseWheelAction和键盘事件KeyboardAction命令均需要用到Robot类向服务端发送事件,该命令同MouseClickAction触发事件相似,从而实现鼠标滚标事件和键盘事件。
除了鼠标点击和鼠标滚标外的黑色区域是一个ControlView。当手指在ControlView里面移动时,触发事件onTouchMoveMouseMove,根据moveXFinal和moveYFinal计算出鼠标移动距离,并发送到服务端:
dos.writeByte(MOUSE_MOVE);
dos.writeShort(this.moveX);
dos.writeShort(this.moveY);
当服务端接收到该命令时,会触发moveMouse方法,然后通过服务端的Robot类,向系统发送移动事件。
文件传输功能在FileExplorerActivity中实现,客户端向服务端发送请求打开目录命令,服务端返回文件列表的响应命令。当客户端点击的文件不是一个目录,而是一个文件时,服务端就执行打开该文件的命令。
3 系统测试
该系统采用了C/S的结构来进行通信实现,Android端和PC端通过Socket进行网络连接通信。Android端做成APP模式,运行时通过WIFI或蓝牙连接服务端,在PC端使用Java的OSGi框架。在Android手机上经过反复测试,手机连接Server的时间小于3s,PC端对手机控制命令的响应时间小于5s,并能实现手机端对PC端的访问控制、文件操作。Android端鼠标界面、访问控制和文件操作过程如图4所示。
4 结语
智能手机在世界范围内的快速普及,加上科学技术的高速发展,让人们对智能手机的功能要求越发靠近日常生活。该系统在运行方面基本能完成所要求操作,但设计界面还不够完善,在常规使用中应有合适的操作界面,同时还应完善操作功能,如在本地进行新增、修改、删除的操作。为便于未来用户使用,该系统有待于今后深入探讨和研究。
物联网互动体验馆科普展品及教具研发 项目编号:cstc 2012gg-kp1B40005
物联网科普系列丛书 项目编号:csts 2012gg-kp1B40006
“教学做评”四位一体的实训模式的探索与研究 项目编号:XJG1204
重庆市级大学生创新创业训练计划项目——基于RFID和6LoWPAN的室内定位系统的设计 项目编号:201310617023
文/重庆市物联网工程技术研究中心/重庆邮电大学工业物联网与网络化控制教育部重点实验室 李倩 付蔚 洪阳