APP下载

Android平台设备盘点客户端的设计与实现

2016-07-04高毅

电脑知识与技术 2016年15期
关键词:客户端

高毅

摘要:现有的设备盘点大多是手工或者半手工的方式,这使得设备盘点的工作量大大增加。该文基于QR Code技术和Android技术,提出一种通过移动设备扫描设备上的条码标签来实现设备盘点的方法。该客户端的实现,提高了设备盘点的工作效率,对企业的设备管理有着重要的意义。

关键词:Android;客户端;QR Code;设备盘点

中图分类号:TP319 文献标识码:A 文章编号:1009-3044(2016)15-0088-03

Abstract: Existing equipment inventory is mostly manual or semi-manual mode, which makes the equipment inventory workload increase greatly. In this paper, based on the QR Code technology and the Android technology, put forward a kind of via mobile devices scans the bar Code label on the equipment to realize the equipment inventory method. The client implementation, improve the efficiency of the equipment inventory, equipment management is of great significance to the enterprise.

Key words: Android; Client; QR Code; equipment inventory

随着科学技术的不断发展,企业生产水平的不断提高,企业对设备种类的需求也日趋复杂,设备数量也日益庞大,这为企业设备管理提出了许多问题与挑战[1]。然而,目前的设备管理系统相对落后,迫切需要结合先进稳定的技术,开发出适于当前的设备管理系统,以保证对设备的运行和维护过程实行科学化管理[2]。现有的设备管理系统中的设备盘点功能大多没有太好的处理方式,都是手工或者半手工的方式,这导致设备盘点工作量的大幅度递增,并且,还会存在盘点错误。鉴于此种情况,本文基于QR Code技术和Android技术,提出一种通过移动设备扫描设备上的条码标签来实现设备盘点的方法。该方法使设备盘点的工作量大大减少,并能把人为错误降到最低。该客户端的实现,对企业的设备管理有很好的实际应用价值。

1 相关技术

1.1 QR Code

QR码的“QR”是Quick Response 的缩写。这种二维码能够快速读取,与之前的条形码相比,QR 码能存储更丰富的信息,包括对文字、URL 地址和其他类型的数据加密。QR码1994年由日本Denso-Wave公司发明,QR码的标准JIS X 0510在1999年1月发布,而其对应的ISO国际标准ISO/IEC18004,则在2000年6月获得批准[3]。QR码是属于开放式的标准。

1.2 ZXing

ZXing是一个开源的开发库,该库支持条形码的编码和解码。该库支持的条形码编码格式有UPC-A、EAN-8、 EAN-13、 Code 39、 Code 128、 ITF、 Codabar、 Plessey、 MSI、 QR Code、 PDF-417、 Aztec、 Data Matrix;该库支持的条形码解码格式有UPC-A、 UPC-E、 EAN-8、 EAN-13、 Code 39、 Code 93、 Code 128、 ITF、 Codabar、 MSI、 RSS-14 (all variants)、 QR Code、 Data Matrix、 Aztec and PDF-417;该库的运行平台有Java环境、Android环境等[4]。

ZXing库中有几个非常重要的类包,分别为CaptureActivity、CaptureActivityHandler、DecodeThread、com.google.zxing.client.android.camera、ViewfinderView。其中,CaptureActivity类,用来启动条码识别扫描器的类; CaptureActivityHandler类,用来调用条码解码线程的类; DecodeThread类,用来解码条码的线程的类; com.google.zxing.client.android.camera包,用来控制移动端摄像头设备的包;ViewfinderView类,是负责实现自定义扫描控件的类。

2 系统设计

2.1 系统工作流程

设备验收使用后,给设备编一个设备编号,根据该设备编号生成一个QR码标签,贴在设备上。一次设备盘点的时序图如图1所示,用户通过客户端扫描QR码,解析出设备编号,根据设备编号向服务器端的Servlet发送查询请求,Servlet运行doPost方法到数据库中查询信息,把查询到的设备信息返回到客户端,用户核对设备信息,再根据盘点信息向服务器端的Servlet发送请求,把盘点信息记录到数据库中,并返回操作成功与否的标志信息。这就是一次设备盘点的工作流程,不断地重复这一流程,直到盘点结束,就可以得到设备盘点结果,打印盘点报表,让部门负责人签字确认。

2.2 数据库设计

设备盘点只是设备管理中的一个功能模块,下面仅对和设备盘点相关的数据库表做详细介绍。为了满足移动客户端的设备盘点需求,设计如下的数据项和数据结构:

管理员信息表(工号,姓名,密码,所属部门编号,备注);其中,工号是主键;所属部门编号是外键,来自部门信息表;使用工号和密码进行登陆。

部门信息表(部门编号,部门名称,办公地点,部门负责人,负责人电话,备注);其中,部门编号是主键。

固定资产信息表(设备编号,设备名称,规格型号,生产厂商,生产日期,附件,验收日期,所属部门编号,备注);其中,设备编号是主键;所属部门编号是外键,来自部门信息表;验收日期是填写设备验收后正式使用的日期;附件字段填写设备的附属配件信息。

盘点信息表(盘点编号,盘点类型,盘点日期,盘点结果,盘点部门编号,备注);其中,盘点编号是主键;盘点部门编号是外键,来自部门信息表;盘点类型取值为:月盘点、季度盘点和年度盘点。

盘点细目信息表(盘点细目编号,盘点编号,设备编号,设备状态,备注);其中,盘点细目编号是主键;盘点编号是外键,来自盘点信息表;设备编号是外键,来自固定资产信息表;设备状态取值为:正常、待修、损毁、丢失、其他。

3 关键技术

3.1 QR Code扫描

扫描获取QR码信息首先要打开移动端设备的摄像头,并通过Srufaceview来预览;然后调用com.google.zxing.client.androdi.camera包中的相关方法来控制摄像头自动对焦;再调用ZXing中的DecodeThread类的相关方法来进行解码 [5]。在这一过程中,使用到线程机制,为了不堵塞Android的UI线程,要把解码工作单独放在一个线程中来实现。下面仅对回调方法handleQRCodeDecode作详细描述。

public void handleQRCodeDecode (Result result, Bitmap QRcode) {

inactivityTimer.onActivity();

playBeepSoundAndVibrate();

String resultString = result.getText();

//若扫描结果为空,提示扫描失败

if (resultString.equals("")) {

Toast.makeText(CaptureActivity.this, "扫描失败!", Toast.LENGTH_SHORT).show();

}else {

Intent resultIntent = new Intent();

Bundle bundle = new Bundle();

bundle.putString("result", resultString);

resultIntent.putExtras(bundle);

//回传扫描结果

this.setResult(RESULT_OK, resultIntent);

}

CaptureActivity.this.finish();

}

3.2 Android端与Web端的通信方式

Android与服务器通信通常采用HTTP通信方式和Socket通信方式[6]。在本系统中,我采用HTTP的通信方式。HTTP是一种无状态协议,使用request对象来实现请求,使用response对象来实现响应,一次会话结束,客户端和服务器端的链接就会自动关闭。

为了实现Android端和Web端的数据交互,我编写了一个静态方法,返回值为JSON类型,方法的头部如下:

public static JSONArray dopost(String url,String [] parameter,String [] parameter_value,int len,String response_para)

其中,ur是服务器端servlet的地址,parameter是传递参数的名称,parameter_value是传递参数的值,len是传递参数的个数,respense_para是传递的标志。该方法的核心代码如下:

for(int i=0;i

ns.add(new BasicNameValuePair(parameter[i], parameter_value[i]));

}

UrlEncodedFormEntity in;

try{

//设置编码格式为UTF-8

in = new UrlEncodedFormEntity(ns,HTTP.UTF_8);

pj.setEntity(in);

rp = client.execute(pj);

//若响应结果不为空,就把响应结果拼接成字符串,再把字符串转换为json数组返回;否则,返回null

if (rp.getEntity() != null) {//响应结果不为空

BufferedReader bufreader = new BufferedReader(new InputStreamReader(rp.getEntity().getContent(), HTTP.UTF_8));

StringBuffer sbuffer = new StringBuffer();

String row= bufreader.readLine();

while (row != null) {//把响应结果拼接成字符串,存储于sbuffer中

sbuffer.append(row);

row= bufreader.readLine();}

bufreader.close();

//把sbuffer中存储的字符串转换为json数组并返回

JSONObject jsonobj = new JSONObject(sbuffer.toString());

jsonarr = jsonobj.getJSONArray(response_para);

return jsonarr;}

else{//响应结果为空

return null;}

}catch(Exception e){

return null;}

4 结束语

设备盘点客户端的测试效果如图2和图3所示。

点击扫描盘点按钮调出二维码扫描对话框对QR码进行识别,根据识别到的设备编号到服务器查询出设备信息显示,用户核对后,填选设备状态信息,点击保存按钮,完成一次设备盘点,重复此操作过程,结束盘点时,点击完成盘点按钮,就可以得到如图3所示的盘点结果信息,在盘点结果信息中,可以看到部门的这一次盘点的详细信息,该部门总的设备数、正常数、待修数、损毁数、丢失数和其他情况的数量。该客户端的实现,提高了设备盘点的工作效率,对企业的设备管理有着重要的意义。

参考文献:

[1] 郭云飞,黄东. 基于B/S模式的多层结构的电厂设备管理系统的设计[J]. 计算机与现代化,2004,12(12):119-119.

[2] 张庆. 基于状态的设备管理系统的设计与实现[J]. 计算机工程与应用,2006,15(15):179-179.

[3] QR码_百度百科[EB/OL]. http://baike.baidu.com/link?url=qBXGeJKmUY_Vq10BBl_Xsl-9b7ka8T2rwNfSNh_ox3fQHpqt RiKNv_DTIY7huSbu.

[4] ZXing[EB/OL]. https://github.com/zxing/zxing.

[5] 佘志龙,陈昱勋,郑名杰,等.Google Android SDK开发范例大全[M]. 3版.北京:人民邮电出版社,2011:718-718.

[6] 左军. Android程序设计经典教程[M].北京:清华大学出版社,2015:311-311.

猜你喜欢

客户端
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
大枢纽 云平台 客户端——中央人民广播电台的探索之路
客户端空间数据缓存策略