刘玉生,肖兴发
(1.际华三五二二装具饰品有限公司 计算中心,天津 300161;2.天津大学 软件学院,天津 300072)
随着互联网和移动通信技术的不断发展,全球进入了信息化时代,人类的通信方式发生了根本性的改变,网络和手机成为越来越普遍的通信工具。越来越多的手机增值服务应运而生,一种崭新的以手机为移动终端的数字图书馆服务方式也悄然兴起。这种基于图书馆的手机增值服务,即“手机图书馆”作为一个概念被提出来,并逐渐成为图书馆继网络服务之后的新兴服务领域[1-3]。
手机图书馆是在无线通信网络环境下对数字图书馆服务功能的进一步延伸,其实现的三个基本组成部分为手机终端、无线互联网、数字图书馆系统。系统采用基于J2ME嵌入式软件的实现方式。
J2ME是SUN公司针对嵌入式、消费类电子产品推出的开发平台,可将手机图书馆系统设计成一个可在手机上安装的客户端软件,读者可以通过该软件访问图书馆提供的无线移动服务功能[4-5]。
J2ME定义了一种灵活的层次结构来规范众多的移动设备,不同层次的规范相互协作来提供一个完整的移动JAVA平台。J2ME定义的移动JAVA平台分为四层:主机操作系统、配置(Configuration)、简表(Profiles)和厂商可选包。其体系结构如图1所示。
其中,配置是将基本运行环境定义为一组核心类和一个运行在特定类型设备上的特定的JVM[6]。简表定义了应用程序所支持的设备类型。特别地,它向J2ME配置添加了特定域的类来定义设备的某种作用,它建立在配置的顶部。厂商可选包指的是由厂商提供给程序开发人员的一组与其他规范没有任何依赖性的类库,开发人员可以利用这一类库来开发出具有特定功能的应用程序。
根据调查与研究,考虑目前中国移动通信的发展和主流手机设备的状况,系统主要提供用户登录、修改密码、设置还书提醒、书籍检索、预约与取消预约图书、续借书籍、查看用户信息和服务信息及帮助等功能。移动图书馆需求的总体用例图如图2所示。
系统主要功能如下:
(1)设置提醒:系统要求用户能够为自己借的每本书籍单独设置还书提醒功能。提醒时间到时,如果用户没有使用本系统,程序应该能够自动启动移动图书馆软件显示提醒书籍的相关信息及播放音乐直到用户点击确定;若用户正在使用本系统,该提醒会被忽略。
(2)检索书籍:可分为按关键字检索和按书的索引号检索两种情况。用户可以根据自己的需要选择检索方式。
(3)预约图书:当某本书已经全部借出时,用户可以建立图书预约,待别人还后,用户可以在第一时间借到该书。若该书在图书馆有库存,则该书不能预约,用户可自行到图书馆借阅。
(4)取消预约:用户可以登录自己的帐号取消该书的预约。
(5)续借图书:系统要求提供图书续借功能。若该书没有人预约,用户可续借,续借后该书的还书时间为当前日期的30天之后;若该书已经有人预约了,则用户不能续借。
(6)查看帐号:包括查看已借书籍、查看预约图书和查看帐单三个功能。查看已借书籍,可以查看自己已借书籍的列表,选择某本书后还可以查看该书的相关信息,包括该书的到期时间;查看预约图书,可以查看自己已经预约的书籍的相关情况,包括该书是否可借的状态,以方便用户尽快借到自己想借的书;查看帐单,可以查看到目前用户还没有交的罚款信息。列出每本书欠款的情况,包括每本书的书名、罚款数目以及罚款原因等信息。
(7)服务信息:包括查看图书馆通知、开放时间、与图书馆联系和向图书馆提建议等几个功能。用户无论登录与否都可以使用本功能。
(8)帮助:相当于用户教程,指导用户如何使用本系统。它包括如何检索书籍、设置还书提醒、预约与取消预约以及续借书籍等方法。
移动图书馆分为服务器端和客户端两部分,其中服务器端提供类似于现有大部分网上图书馆的功能;客户端这里特指手机客户端,它提供还书提醒、检索书籍、用户管理、预约图书、续借图书和服务信息等功能,总体结构图如图3所示。
对系统主要类的设计说明如下。
2.2.1 主MIDlet类
主MIDlet类由MobileLibraryMidlet.java文件实现。该文件中定义了MobileLibraryMidlet类,该类派生自MIDlet类,同时还实现了CommandListener接口。该类主要继承了 MIDlet 类 的 startApp()、pauseApp()、destroyApp(boolean unconditional)和一些其他自定义的方法。其中startApp()是本程序的启动方法,它负责启动应用程序。该方法主要有两个分支,如果是由PUSH注册机制唤醒应用程序,就显示提醒用户还书的界面并且播放提示背景音乐,否则程序就执行init()方法正常启动。判断程序是否由PUSH注册机制唤醒的方法是通过读取Remind对象中存储的注册时间与当前时间进行比较,如果两个时间相等说明是由PUSH机制唤醒的,否则是程序正常启动。
2.2.2 主界面类
主界面作用由MainUI类来实现。它实现了SVGEventListener和Runnable两个接口,这两个接口主要是实现SVG的交互性。本类当中有5个SVGAnimationElement类型的数组变量,这些数组保存的是SVG中的各种动画元素,例如颜色、位置的变化等,这5个数组分别用于存储选择器动画元素的marker数组、保存当动画元素被选择时颜色的selectedColor数组、保存动画元素未被选择时颜色的unSelectedColor数组、保存动画元素被选择的位置的selectedPosition数组以及保存动画元素未被选择的位置的数组unSelectedPosition。
2.2.3 界面导航类
系统的界面导航由UIController类实现,其主要成员函数如下。
(1)goBack()
goBack()方法主要实现界面导航中返回上一个界面的功能,其过程是首先从栈顶弹出当前的显示控件,然后获得当前的栈顶元素,最后通过midlet回调显示上一个界面,从而实现返回上一个界面的功能。
(2)forward(Displayable display)
forward(Displayable display)方法实现进入到下一个显示屏幕的功能。其过程是首先将要显示的控件压入栈中,然后通过 midlet回调 setCurrent(display)显示该控件。当调用goBack()返回时仍回到原先的屏幕。
(3)repalce(Displayable next)
联网时经常会有一个暂时等待的界面,然后再进入所需要的界面。这时若要返回,应该是返回到联网之前的界面而不是返回到等待界面,因此当从等待界面转到联网之后的界面时,不应该调用forward(Displayable display)方法,应使用 repalce方法,抛弃等待屏幕,从而实现联网后的屏幕可以直接goBack到联网之前的屏幕。
2.2.4 HTTP通信类
一个完整的HTTP连接为:用户通过某个命令发起连接请求,然后系统给出一个等待屏幕提示正在连接,当连接正常结束后,前进到下一个屏幕并处理下载的数据。如果连接过程出现异常,将提示用户并返回到前一个屏幕。用户在等待过程中能够随时取消并返回前一个屏幕。HTTP通信类是系统中很重要的一个类,它负责客户端和服务器端的通信。双方的通信采用前面介绍的通信协议。HTTP通信类由HttpHandler类实现,该类继承了Thread类并重写了 Thread类的 run()方法。run()方法是HTTP通信类的核心方法,实现通信功能。本方法的大致思想是与Web服务器建立连接,发送请求动作信息,收到服务器的响应后根据响应码分配给相应的处理类对来自服务器的响应数据进行解析。
系统采用J2ME作为客户端的开发基础,通过SVG、PUSH等技术丰富系统功能并美化系统界面。服务器端使用成熟的Servlet技术实现。同时系统在开发过程中使用类似于MVC模式,实现了符合系统的要求。
[1]Chen Xiaomei,Guan Xin.The value of mobile phone library in information broadcasting[J].Information Science,2006(11).
[2]Tung Weifeng, Yuan Soetysr, Lin Binshan.M-Library: a mobile service in online WebPAC[J].International Journal of Mobile Communications 2007,5(5):487-507.
[3]Nor Shahriza Abdul Karim,Siti Hawa Darus,Ramlah Hussin.Mobile phone applications in academic library services:a students’ feedback survey[D].Malaysia:International Islamic University,2006.
[4]陆东林,宾晟,国刚.J2ME开发技术原理与实践教程[M].北京:电子工业出版社,2008.
[5]郝玉龙,李向前.J2ME移动应用开发[M].北京:清华大学出版社;北京交通大学出版社,2006.
[6]施铮.J2ME无线移动游戏开发[M].北京:人民邮电出版社,2006.