基于Android的图书漂流共享软件开发*
2018-09-10唐子昱马学森
朱 建,唐子昱,宫 帅,谈 杰,马学森,3
(1.合肥工业大学计算机与信息学院,安徽 合肥 230009;2.合肥市第八中学,安徽 合肥 230071;3.广东三水合肥工业大学研究院,广东 佛山 528000)
1 引言
近几年,为了响应国家大力建设环境友好型、资源节约型社会的号召,共享经济和共享服务大行其道,利用移动支付、移动通讯、GPS等网络技术手段,整合线下闲散物资或个人劳务,并以较低价格对供给方与需求方进行精准匹配,减少交易成本,从而实现“物尽其用”和“按需分配”的资源最优配置,实现供求双方收益最大化[1]。小至充电宝,大到汽车,共享的理念逐渐渗透到生活中的方方面面,而图书作为保有量大、闲置率高、文化价值大的常用物品,也是最适宜共享的物品之一。
据证实,当今社会拥有的海量图书散布在千家万户,人均书本量为19.82本,但部分书籍阅读量不足1次就被闲置在各个用户的书架上[2]。因此,如何实现各用户图书资源的流转和共享,对发挥全社会图书资源的有效价值,促进社会和谐具有重要意义。互联网和物联网的发展,以及各种APP开发平台的成功应用,为实现图书资源共享提供了技术保障。与此同时,Android操作系统已成为市场主流,2016年上半年,Android操作系统便占有全球移动智能手机系统86.2%的市场份额[3]。此外,线下面对面交互或借助中间媒介进行交互已成为人们所普遍认可的便捷交互方式。因此,利用线下多种交互方式在Android系统上设计和开发一款共享图书的APP,具有良好的发展前景。
2 传统图书共享方式的缺陷
“图书漂流”活动源于20世纪60年代的欧洲,方法类似于中世纪的“漂流瓶”,即书友将自己拥有却不再阅读的书籍贴上特定的标签后,投放到公园长凳、咖啡馆桌子等公共场所,无偿地提供给拾取的人阅读。拾取之人阅读之后再以相同的方式将书投放到公共环境中去,从而实现“图书漂流”。但这类传统的“图书漂流”共享方式难以全面推广,其主要缺陷有以下几点。
2.1 无信息化支持
图书由书友自愿放置于公共场所,因此,图书的拥有者、放置地点、图书类别等问题均无有效信息可供参考,这常导致其他书友借书无处可寻,对图书内容更是一无所知。而散播在公共场所的零散书籍在恶劣环境下被破坏、损毁至无法阅读也难以被人察觉,从源头处便阻碍图书的正常“漂流”[4]。
2.2 无有效管理手段
由于缺乏管理系统,图书漂流无法对借阅者做出有效约束,私自截留或肆意损坏图书都会影响正常的图书漂流过程。上海市普陀区图书馆对漂流图书的跟踪调查结果显示,自首批图书“放漂”后,社会各界的捐赠图书册数已突破十万,但图书循环率仅为30%.此外,部分回漂的书还存在划痕、缺页等现象,余下的图书或是暂时搁浅,或销声匿迹[5]。
2.3 图书馆服务管理模式问题颇多
当前的图书馆管理系统以图书管理为中心,难以体现图书馆以读者为中心的服务理念,大部分图书馆管理系统均存在图书馆资源相对隔离及信息服务相对孤立、不能全面集成图书馆的业务和管理工作,信息孤岛现象严重的问题[6]。
*[基金项目]广东省科技发展专项基金资助项目(No.2017A010101001);中央高校基本科研业务专项基金资助项目(No.JZ2016HGBZ1032);论文得到国家留学基金资助
3 “图书漂流”APP特点
本文将“图书漂流”APP与线下跳蚤市场、同类换物网和同类型的APP进行了比较,详细说明了“图书漂流”APP的客户群、形式、地域、运营模式、业务类型、时间限制和功能创新等特点。详细特点比较情况如表1所示。
4 “图书漂流”APP开发步骤
在APP开发过程中使用了Eclipse开发平台,开发语言为Java,还包含AndroidSDK、MySQL、ZXING、豆瓣图书API和百度地图SDK等多个辅助工具,最终实现了书友在线上分享交流图书漂流信息、线下直接借阅[7]。
表1 “图书漂流”APP的特点
4.1 总体设计
APP总体工作流程如图1所示。
图1 工作流程图
一个Android应用程序一般包含4种子构造块,即Activity、Service、Content Provider和 Broadcast Receiver。Activity是在手机前台与用户通信,Service在后台分析前台所传达的命令而完成相关工作,Content Provider是数据存储,Broadcast Receiver协助程序组件之间的相互通信[8]。
“图书漂流”APP将用户分为两类,即书友(普通用户)和管理员,其中,管理员负责对分布于城市各地的图书交换柜中的图书资源、用户信息进行调配和管理,负责整个APP的管理工作;书友作为普通用户,主要通过APP进行图书的查询、申请和借阅,享受APP带来的便利服务。同时,与APP和服务器进行信息交互的图书交换柜具有自动控制、验证、远程监控和报警等功能。
4.2 功能设计
APP的注册用户分为管理员和书友(普通用户),其具体工作如下。
4.2.1 管理员
管理员负责对整个系统的维护和管理,包括图书的上架、调配、销毁以及用户行为的监督、提醒等,其具体功能如下。
4.2.1.1 添加图书
管理员使用摄像头扫描图书条形码,服务端解析条形码数据后获得图书的ISBN码,并在相关出版网站查询图书的具体信息,同时,将该信息呈现给管理员,管理员核对信息无误后将图书正式上架,以供书友查询、借阅。
4.2.1.2 图书调配与管理
因为各个图书交换柜的周边环境不同,使得不同图书交换柜的借阅信息呈现差异化的倾向和偏好,管理员可以根据借阅信息主动平衡图书交换柜间的差异。例如,减少借阅量小的图书交换柜的图书数量,并将剩余图书转向借阅量大的图书交换柜,或将特定种类图书集中投放在受欢迎的图书交换柜,强化书友的借阅体验。此外,还可以勘正图书的谬误信息,销毁下架图书的信息。出现以上情况,管理员可以通过APP随时操作,实时更新数据。
4.2.1.3 用户管理
管理员可以通过APP查看书友的详细借阅信息,包括借阅时间、书目、逾期时间、评论和积分等。对提出申请的书友,管理员可参考该书友的借阅历史和积分进行审核;对有长时间逾期不还、损毁图书或其他违规行为的用户,处以临时封禁、永久封禁和销户等惩罚,以维护良好的用户环境。
4.2.2 普通用户
书友是系统中的普通用户,通过APP即可方便、快捷地查询和借阅图书,享受阅读的乐趣,具体功能如下。
4.2.2.1 设定资料
书友可以在APP中选择填写一些个人信息——性别、生日、喜爱的图书种类、手机、QQ等联系信息,在注册页面的地图上还可以选择用户所在位置,系统会根据书友填写的相关信息、借阅和归还情况提供个性化服务,包括推荐特定书目、借阅地点导航和好友推荐等。
4.2.2.2 图书追溯
系统中每本书上架、历次借阅、归还、评分与评价、下架等都被服务器数据库系统详细记录,书友可以追溯自己感兴趣的所有图书的漂流航迹,对图书漂流状态进行持续性追踪,并对图书进行全生命周期的关注。
4.2.2.3 查询与借阅图书
查询图书是书友在APP中通过关键字查询自己希望借阅的图书,查询结果以列表方式呈现,书友可以查看每一条查询结果,最终选定借阅的图书。在图书的详细信息界面提供了该系列图书的具体信息,包括存放点、存放数量、现有借阅人等。书友根据相关信息可自行选择借阅地点,APP自动生成导航信息,并显示出服务器生成的口令信息,引导书友前往相应地点的图书交换柜通过口令验证来完成借阅。同时,如果借阅图书所存放的点距离书友比较远,书友可以通过APP发出捎带请求,捎带者根据捎带请求可将图书捎带至书友附件的可借阅点,以便书友自行前往借阅。
4.2.2.4 图书与私信管理
图书管理是书友对已借阅的图书进行管理,包括发表图书评分、评价,拖动进度条可调整当前已读的进度,查看自己所有借阅图书的时间、地点和归还时间,此外,还可查看其他书友发送的交友或借阅申请等私信,并对其作出回应。4.2.2.5 申请捐赠
书友可以捐赠身边闲置的或希望与他人分享的图书,通过添加图书的功能直接将图书上传到数据库中,并可持续关注该本图书的借阅轨迹。
4.2.2.6 用户图书积分
服务器根据图书状态信息的改变分别给予图书捐赠者、图书捎带者、已完成图书借阅和归还的书友不同的积分奖励。书友与管理员的相应功能如图2所示。
4.3 数据库设计
在服务器端MySql的数据库BookCrossing中,建立了
多张表来存放APP所需的大部分信息,还有一部分存放在手机中的数据库sqlite里作为缓存[9]。
4.3.1 数据库概念设计
“图书漂流”APP的数据库中包括了Users(用户)和Books(图书)2个实体,实体间的关系如图3所示。
图2APP功能示意图
图3 系统E-R图
图3中,N表示相邻的2个实体,比如Users与Books之间是一对多的关系,N:M表示多对多的关系,在保证数据完整性的前提下,最大程度节省数据存储空间,保证了实体间的合理关系,且无冗余。3个实体又包括了各自的字段,通过借阅、管理、归还等多个外键联系,使得整个数据库形成一个完整的整体,具有较高的工作效率。
4.3.2 数据库逻辑设计
Users表:保存用户登录时所需要的信息,其中包括用户名、密码、用户权限(用以区分管理员和书友)、是否允许用户借阅的标记位、申请信息是否通过的标记位等。
Lib表:保存所有图书角的图书信息,其中包括图书的ISBN码、图书名、各个图书点某本书的拥有量、图书类型、某书评分的计算量等。
UsersData表:保存用户的私人信息,其中包括年龄、生日、爱好、手机、QQ、位置信息等。
4.4 终端技术实现
4.4.1 扫码上传
扫码功能通过集成在APP内的zxing扫码软件实现。软件打开手机摄像头,识别和读取代表图书ISBN码的条形码,再将读取到的ISBN码交付给其他模块,从而实现对图书的确认。
首先是确定权限,赋予软件相应的权限:
android:name="android.permission.VIBRATE"/> android:name="android.permission.CAMERA"/> android:name="android.hardware.camera.autofocus"/> 接着在扫码按钮上设置监听器,触发监听器执行startActivityForResult()方法调用扫码程序,将得到的信息返回给调用者,最后在onActivityResult()中用相应的Intent类型data接收图书ISBN码。 4.4.2 图书信息下载 通过图书ISBN码在相关网站查询,从查询结果中筛选出有效信息反馈到移动终端。 取得图书ISBN编号后,用“https://api.douban.com/v2/book/isbn/”与ISBN号拼接得到图书信息的地址。 整理地址图书信息中的JSON格式数据,从中分离出图书的有关信息,包括封面、作者、简介等,即: public Bitmap DownloadBitmap(String bmurl){ Bitmap bm=null; InputStream is=null; BufferedInputStream bis=null; try{ URL url=new URL(bmurl); URLConnection connection=url.openConnection(); bis=new BufferedInputStream(connection.getInputStream()); bm=BitmapFactory.decodeStream(bis);} } 4.4.3 图书信息存储 存储反馈的图书信息,以备管理员和书友管理、查询。将图书信息拆分为String数组进行传输,并保存到数据库中,管理员可以根据图书信息审核图书,书友可以根据图书信息决定是否借阅,即: Socket socket=new Socket("192.168.1.107",8888); System.out.println("Client connected"); DataOutputStream dout = new DataOutputStream(socket.getOutputStream()); String query=String.format("addbook/%s/%s/%s/%d",isbn, bookname,bookcorner,quantity); dout.writeUTF(query); DataInputStream din = new DataInputStream(socket.getInputStream()); String msg=din.readUTF(); 4.4.4 路径规划 决定了需要借阅的图书后,APP可以引导书友到相应的借阅点借阅图书。 先确定书友的位置,再根据借阅点的位置自动为书友规划出最佳路径,以节约书友的时间和空间成本,即:if(location==null||mMapView==null)return; MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius()).direc tion(100).latitude(location.getLatitude()).longitude(location.get Longitude()).build();if(isFirstLoc){ isFirstLoc=false; LatLng ll=new LatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdate u=MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(u);} 本文针对现有图书漂流的不足,结合当前Android平台的巨大优势,将传统图书漂流与Android平台有机结合,提出了基于Android平台的图书漂流APP开发方案。该APP提供了线上交流平台和线下交易系统,使书友在线下能够轻松查询并借阅自己想要的图书,同时,在线上与其他爱书之人共享自己的读书心得,彻底打破传统的图书馆—书友的单一结构,以网状形式覆盖城市借阅点,让书友不再受时间和空间的限制,闲暇之余可轻松借阅。5 结束语