王建功,张常清,晏西国,李长红,卜庆凯
(1.积成电子股份有限公司电网自动化事业部,济南250110;2.青岛大学自动化工程学院,山东青岛266071)
拼接屏技术的进步和市场应用的拓展促使液晶拼接市场逐步成熟,经过近年的快速发展,大屏幕拼接产品已由最初较为狭窄的专业级高端应用(如广电、电力和电信领域等)扩展到现在覆盖公共管理、民生、能源、工业、商业和娱乐等几十个细分应用领域,并且迅速在展览会馆、电视台演播厅、气象台、火车站、机场、娱乐传媒、军队作战指挥中心、交通指挥系统、公安110指挥系统、电力调度、防汛调度、购物中心以及银行等行业的应用中发挥重要的作用。
当前大部分拼接屏的控制是通过在电脑上运行拼接屏终端控制软件实现的,通过网络实现远程对拼接屏的控制。此方法只能在固定地点登陆控制,电脑不便携带导致其不能灵活、快捷地控制拼接屏。
移动互联网的快速发展以及Android平板电脑等移动设备的广泛应用,使采用平板电脑作为拼接屏控制终端设备成为最佳选择,通过无线网络实现对拼接屏的控制,便可真正实现方便、快捷地远程控制大屏幕,给用户带来更好的用户体验。与传统的基于Internet的远程拼接屏控制系统相比,基于Android平板的控制系统有很好的优势和前景。拼接屏技术和移动互联网技术的发展使这样一款在移动设备上控制拼接屏的智能移动控制系统的出现成为必然的趋势,将来必有大量的市场需求。
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。2011年第1季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2013年9月24日谷歌开发的操作系统Android迎来了5岁生日,全世界采用这款系统的设备数量已达到10亿台。
该系统采用C/S模式及模块化结构设计方法,客户端使用Android软件开发工具包,在Eclipse集成开发环境中进行开发,服务器端软件用C++语言在Visual C环境下开发。利用无线局域网络通信传输图片数据,实现移动终端对大屏幕图像的智能控制。系统流程如图1所示。
图1 系统流程Fig.1 The system block diagram
该系统客户端基于Android平台,利用Android系统提供的各种资源实现对拼接屏显示图像的实时控制,结合用户的需要和软件特点,系统客户端的功能框架如图2所示。
图2 功能框架Fig.2 The function framework
客户端具有如下功能。
1)可与大屏幕显示程序服务端连接。提供与大屏幕显示控制程序的通讯,实现主要控制功能的交互及数据的交互,采用TCP/IP的方式进行通讯。
2)具有人员登录功能。有人员管理及认证功能,实现权限认证功能。未授权的用户不允许操作终端界面。
3)显示大屏幕内容的布局和缩略图。默认显示大屏幕可视化系统的布局和缩略图。在通过移动终端修改大屏幕界面布局后能及时更新并实现整体布局的放大缩小。
4)浏览模式下能对大屏幕窗口上图片进行移动、缩放和旋转等操作,但窗口位置大小保持不变。
5)编辑模式下可对大屏显示程序进行智能化布局调整,可改变窗口的大小和位置,移动缩放窗口时能通过网格设置进行窗口自动对齐。
6)可进行显示模式切换,对浏览与编辑两种模式进行切换,向大屏幕控制程序发送模式切换命令,提供模式切换后移动终端画面的实时更新。
服务器端程序的执行流程基本随着Socket的使用流程进行。首先在主线程中建立一个Socket,绑定端口号为9999。执行Socket的accept指令,程序将进入阻塞状态,等待客户端的连接请求。建立TCP连接,客户端与服务器采用xml文本串进行数据传输,初始化时使用Dom4j解析xml文本获得每个窗口的位置信息与操作信息,新建模式时使用Dom4j生成新的xml文本串,传递给服务器并保存在服务器本地。客户端从登陆界面发送用户名和密码给服务器,服务器验证通过后客户端进入程序主界面[1]。
1)检查网络状态。本模块在浏览模式下执行图片操作,需要有网络连接,因此要知道当前用户的网络连接状态。在初始化图片布局前,程序会使用android.net.Connectivity Manager4类检查网络连接。
2)Android网络权限设置。Android系统是运行在Linux内核上的,有自己的一套严格的安全及权限机制。由于该模块要用到网络连接和获取网络状态,需要具有相应的权限,必须在Android Mainifest.xml中声明所需的权限,否则无法正常运行,且程序不会报错,只能通过捕获异常发现这一问题。具体声明如下
〈uses-permission android:name= “android.permission.INTERNET”〉〈/uses-permission〉
3)数据传输后在PC服务器使用。客户端在编辑模式下,通过新建、编辑等操作创建新的模式,生成相应的xml文本串,通过socket流将文本数据传递给服务器。服务器会在本地模式文件夹下创建对应的xml模式文档保存在本地,客户端重新切换到浏览模式时可读取xml模式文档中的数据,即可浏览新建的模式。
系统主要实现对图片和窗口的各种操作,浏览模式下通过构造一个能对图片进行缩放、移动和旋转等操作的自定义图片控件即可实现,而编辑模式下则需要构造一个能对控件本身进行缩放和移动的控件[2]。
1)浏览模式。通过Android自定义控件继承图片控件,改变控件on touch跟on draw的回调方法,调用Android提供的API(Application Programming Interface)矩阵Matrix对象,可实现目标图片在窗口中的缩放平移。当手指触摸当前图片时就会回调on touch方法实现图片缩放、旋转和移动,回调on draw方法时就会实现画圆或箭头等操作提示,实现效果分别如图3~图5所示。
图3 图片缩小Fig.3 The image after narrowing
图4 图片旋转Fig.4 The image rotation
图5 图片移动Fig.5 The image movement
2)编辑模式。当客户端从浏览模式切换到编辑模式时,主要通过移动缩放等操作改变窗口的宽高和位置信息,而在Android系统中则是通过改变图片控件的宽高与位置坐标实现,使图片显示在控件上。编辑好后保存当前编辑的模式即各个窗口的位置信息和操作信息,生成新的模式,通过xml文本串传送给服务器,服务器验证通过即生成新的模式。在移动和缩放控件时,为了更好地做好自动对齐,客户端使用基于世界坐标的对齐方式设置横纵坐标,通过自定义相对布局,使网格线显示在布局中,控件属性设置为android:scale Type=“fit XY”[3]。实现效果如图6所示。
图6 窗口移动以及网格对齐Fig.6 Windows movement and grid alignment
客户端的两种模式的切换是通过动态加载 Fragment实现的,Fragment是在 Android 3.0(APIlevel 11)开始引入的。可把Fragment想成Activity中的模块,该模块有自己的布局和生命周期,单独处理自己的输入,在Activity运行时可加载或移除Fragment模块。可把Fragment设计成可在多个Activity中复用的模块。当开发的应用程序同时适用于平板电脑和手机时,可利用Fragment实现灵活的布局,改善用户体验。系统在XML(eXtensible Markup Language)布局文件中添加Fragment到Activity。在项目布局文件中定义好两种模式下的布局控件,设定控件的坐标位置实现界面智能布局[4]。
首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路。使用ServerSocket创建TCP服务器端,然后在Android客户端使用Socket的构造器连接服务器。其中Android终端通过WIFI连接,使其与PC处于同一局域网[5]。TCP通信模型如图7所示。
1)PC服务器启用ServerSocket两个通信实体,在建立虚拟链路前,需要一方先准备好,主动接收来自其他通信实体的连接请求。使用ServerSocket对象监听来自客户端的Socket连接,如果没有连接,则将一直处于等待状态。当接收到连接请求后,获取消息到输入流,并保存到文件[6]。
图7 TCP通信模型Fig.7 Model of TCP communication
2)服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答。服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。Android客户端使用Socket的构造器连接服务器,指定服务器IP和端口号即可。Sockets=new Socket(“192.168.1.100”,9999);这样服务器端的 accept()方法就得到响应,从而向下执行,服务器端和客户端形成了一对互相连接的Socket,再进行通信时就没有服务器与客户端之分了,都是通过输入输出流进行通信[7]。通信流程如图8所示。
3)图片传输过程。通信过程中图片的传输是通过使用Base64编码将图片生成文本串在Socket流中传递。客户端收到服务器返回的内容后通过逗号区分命令中的各个部分,将Base64编码后的文本串分离后采用Base64解码得到传递的图片[8]。
图8 通信流程Fig.8 The communication block diagram
4)xml数据传输。通信中数据传输是通过xml进行的。目前几乎所有软件开发平台对xml支持都非常良好。xml可作为不同数据库平台的通用标准,无论数据库是oracle,db2还是sqlserver,只要遵循统一的约束,即可让各个数据库平台间的数据共享变为可能。
5)dom4j解析和生成xml:dom4j是个非常优秀的Java XMLAPI,类似于jdom,用来读写XML文件的,具有性能优异、功能强大和易使用的特点,同时也是个开放源代码的软件技术,可在SourceForge上找到。读写 XML文档主要依赖于 org.dom4j.io包,其中提供 DOMReader和SAXReader两类不同方式,而调用方式相同。dom4j最大的特色是使用大量的接口,这也是比jdom灵活的主要原因[9]。
6)通信中的数据类型与格式。客户端与服务器通信中的数据交互都是以字符串类型进行传递的,客户端通过dom4j解析得到数据后根据需求将字符串类型的数据通过强制转换为整型、浮点型等数据类型存在数组中,初始化布局信息时从指定数组中获取数据即可。编辑后的布局信息也经强转后再次通过dom4j技术生成xml文本串通过socket打印流输出给服务器。
由于大屏幕跟平板屏幕分辨率不可能相同,在将大屏幕布局装换成平板布局的过程中,必然要考虑坐标转换的问题。用专业术语解释就是世界坐标系和屏幕坐标系的转换问题,大屏幕坐标是世界坐标,而平板坐标就是屏幕坐标。由于两者的坐标原点都是屏幕的最左上角,所以,这里的坐标转换就简单了很多,只需考虑比例系数的问题即可。静态的坐标转换的计算只需乘以一个比例系数即可,但由布局变化引起的坐标计算就需要考虑这些计算应该在哪个域上进行。系统采用的是将所有坐标变换都在世界坐标域上进行计算,然后经过比例系数的转换再显示在平板上。这样不仅能减小计算的复杂程度,而且能将坐标转换的误差降到最小[10]。
该系统在浏览与编辑两种模式下采用相对布局,通过基于世界坐标的智能布局算法实现了窗口移动、缩放,网格对齐,图片移动、缩放和旋转等功能,以及整体布局的放大与缩小显示效果。
1)浏览模式下,通过解析服务器初始化发来的数据,获取各个窗口的位置大小等信息,以及特定窗口允许的图片操作信息,对当前显示窗口的自定义控件操作类型进行设定,流程图如图9所示。
2)在编辑模式下网格对齐中,采用世界坐标的对齐方式,通过设定网格线使网格显示在布局底部,网格实现是通过自定义相对布局,重写on draw方法,程序运行时回调on draw方法,即可在布局底部显示网格线[11]。移动当前窗口时判断当前窗口的顶点坐标与网格点的距离,松手时使窗口的顶点坐标位于最近的网格点上实现自动对齐,对齐流程图如图10所示。
图9 浏览模式下布局流程Fig.9 The flow of layout in browse mode
图10 自动对齐流程Fig.10 The flow of automatic alignment
3)整体布局的放大和缩小通过整体改变窗口的宽度和高度实现,缩小时使整体布局的宽与屏幕宽相等,放大时使整体布局高与屏幕高相等,缩放时保持原来的宽高比不变,从而实现整体布局的缩放[12],效果实现如图11、图12所示。
图11 拼接屏整体布局Fig.11 The overall layout of mosaic screen
图12 整体布局缩小Fig.12 The overall layout after narrowing
在Eclipse IDE开发环境下使用Java语言,设计和实现了基于Android平台的智能控制器的应用程序,并在模拟器上测试了各项功能,均能输出预期的结果。采用的测试平台是Android 4.0,API Level为19,分别在Android模拟器和华为平板上进行测试。
1)各种触摸手势识别操作。手势操作包括图片的移动、缩放、旋转和pitch操作,其中移动操作为单点触摸,当单点拖动图片操作时,若另一手指触及屏幕时,会造成单点触目跟多点触目的冲突,导致程序报错。其他手势操作功能均正常。笔者实现了对单点操作和多点操作的智能识别,修复了此错误。
2)网格对齐功能。在对网格线的数值大小进行设置时,若误输入汉字或字母,则程序会报错。通过对网格线输入内容的格式进行判断修复了此错误。
3)模式编辑。测试了新建、编辑、添加和删除窗口等各种编辑模式的操作。
4)其他功能。整体布局放大缩小、前进后退和模式切换等功能。
1)修复了多点触摸时跟单点触摸操作冲突的Bug。
2)修复了编辑模式下网格对齐中网格数值误输入带来的Bug。
3)修复了编辑模式下添加窗口后整体布局再缩小后的新添加窗口移动范围出界的Bug。
4)修复了新编辑的模式时,若窗口数量较少(4个或6个窗口),运行时界面加载失败的Bug。
5)修复了前进后退次数限制的Bug。
6)修复了添加的窗口在浏览模式下获取图片失败的Bug。
7)修复了当快速操作图片后,若有一窗口从编辑状态切换到不可编辑状态,前进后退会出现问题的Bug。
8)编辑模式下,几个图标按钮意义不太明确,已经美化。
测试人员将软件安装在华为、三星等平板上对系统兼容性和功能正确性进行测试。根据软件测试大纲对各项功能逐一进行反复的测试,并由开发人员对测试中发现的问题及时解决处理。程序界面易用性如易理解性、易学习性、易操作性均达到要求。该软件在不同的软件和硬件下以及不同网络状态下均显示正常。为测试系统的整体性能和运行效率,使用了测试软件对系统进行了性能测试。软件测试整体性能较好。
笔者设计实现了一种新颖的基于Android平台的拼接屏智能移动控制系统。终端控制器分为浏览和编辑两种模式,浏览模式下实现大屏的实时控制,实现单张图片的缩放、旋转和移动等操作。客户端不断刷新图片,实现大屏的实时控制。编辑模式下可通过移动缩放等操作改变当前窗口的位置大小等,生成新的模式并保存。同时使用智能布局,窗口移动时能自动对齐窗口,并可对当前整体布局进行放大和缩小操作。方便用户更好地操作终端控制大屏。系统对手势识别做了很好的处理,能智能识别当前拖拽、缩放和旋转手势,用户体验很好。
[1]王朝华,陈德艳,黄国宏,等.基于Android的智能家居系统的研究与实现[J].吉林大学学报:信息科学版,2014,32(3):303-307.
WANG Chaohua,CHENG Deyan,HUANG Guohong,et al.Implement of Smart Home Terminal Control System Based on Android Platform[J].Journal of Jilin University:Information Science Edition,2014,32(3):303-307.
[2]HUO Wenjie,LIU Zhenglin,ZOU Xuecheng.PEM:A Lightweight Program Memory Encryption Mechanism for Embedded Processor[J].The Journal of China Universities of Posts and Telecommunications,2010,17(1):77-84.
[3]陈捷,何志坚,宋占伟.Android应用中即时视频图像放大显示方法[J].吉林大学学报:信息科学版,2013,31(2):152-157.
CHEN Jie,HE Zhijian,SONG Zhanwei.Real-Time Video Image Magnification Method in Android Application[J].Journal of Jilin University:Information Science Edition,2013,31(2):152-157.
[4]宋强,齐贵宝,宋占伟.基于Android系统的H.264视频监控设计[J].吉林大学学报:信息科学版,2012,30(3):272-278.
SONG Qiang,QI Guibao,SONG Zhanwei.Design of H.264 Video Monitoring Based on Android System[J].Journal of Jilin University:Information Science Edition,2012,30(3):272-278.
[5]詹成国,朱伟,徐敏.基于安卓的测控界面的设计与开发[J].电力自动化设备,2012,32(1):119-122.
ZHAN Chengguo,ZHU Wei,XU Min.Man-Machine Interface Design and Implementation Based on Android for Measuring and Control Unit[J].Electric Power Automatic Equipment,2012,32(1):119-122.
[6]张麒,王秀敏,任建新.基于Android的桥梁检测车安全监控系统的设计[J].吉林大学学报:信息科学版,2012,30(3):285-290.
ZHANG Qi,WANG Xiumin,REN Jianxin.Design of Bridge-Detection Vehicle Monitoring System Based on Android [J].Journal of Jilin University:Information Science Edition,2012,30(3):285-290.
[7]YU Cuiping,LIU Yuanan,DU Tianjiao,et al.New Predistorter Using Triangular Memory Polynomial for Power Amplifier of OFDM-Based WirelessBroadband Communication System [J]. TheJournalofChinaUniversitiesofPostsand Telecommunications,2012,19(2):43-47.
[8]李黎国,张辉,程号.基于Android健康服务终端蓝牙传输软件的设计[J].电子科技,2012,25(5):115-118.
LI Liguo,ZHANG Hui,CHENG Hao.The Design and Implementation of Bluetooth Software Based on Android Health Service Terminal[J].Electronic Sci,2012,25(5):115-118.
[9]董立岩,隋鹏,辛晓华,等.基于Android智能家居终端控制系统[J].吉林大学学报:信息科学版,2014,32(3):305-310.
DONG Liyan,SUI Peng,XIN Xiaohua,et al.Implementation of Smart Home Terminal Control System Based on Android[J].Journal of Jilin University:Information Science Edition,2014,32(3):305-310.
[10]彭涛,孙连英.回调机制及其在Android应用开发中的应用[J].北京联合大学学报,2013,27(2):69-72.
PENG Tao,SUN Lianying.Callback Mechanism and Its Application in Android Application Development[J].Journal of Beijing Union University,2013,27(2):69-72.
[11]王静波,周栩,许相莉,等.基于视频压缩标准H.264的视频加密算法[J].吉林大学学报:理学版,2009,47(1):75-81.
WANG Jingbo,ZHOU Xu,XU Xiangli,et al.Video Encryption Algorithm Based on H.264 Standard [J].Journal of Jilin University:Science Edition,2009,47(1):75-81.
[12]吴佳楠,刘桂霞,王士刚,等.基于BB84协议的量子保密通信网络流量控制策略[J].吉林大学学报:理学版,2014,52(1):76-80.
WU Jianan,LIU Guixia,WANG Shigang,et al.Quantum Cryptography Network Flow Control Strategy Based on BB84 Protocol[J].Journal of Jilin University:Science Edition,2014,52(1):76-80.