




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
防 灾 科 技 学 院毕 业 设 计题目 基于 Android 平台的二维码扫描技术的实现学生姓名 学号系 别 专 业班级开题时间 答辩时间指导教师 职 称基于 Android 平台的二维码扫描技术的实现作 者 指导老师 摘要 二维码作为为一种信息的新载体,它具有信息量大,传递方便等特性,我们只需要使用手机轻轻一扫就可以自动识别二维码中的内容,从而得到我们想要的信息。整个系统从符合操作简便、界面友好、灵活、实用的要求出发,基于 Android 平台的二维码扫描软件的实现是以 java 为开发语言,以 eclipse 为主要开发环境,并且使用了 Android 自带的本地数据库 SQLite,在系统中使用了 MD5 加密等相关技术,使用了 handler 等线程控制机制,并且通过图像的灰度化,二值化等相关解析技术解析二维码中的信息。系统中有历史记录的存储功能,自动对焦功能,界面实现方面,采用了界面的定时自动刷新,并且最大程度的考虑了用户的使用习惯。论文主要介绍了本课题的开发背景,开发平台,所要完成的功能和开发的过程。关键词:二维码; SQLite 数据库; eclipse; 摄像头;AndroidThe Implementation of the Qr Code Scanning TechnologyBased on the AndroidAuthor Instructor Abstract qr code has become a new carrier of information, it has the features that having a large amount of information and transmission convenience,we only need to use a mobile phone with a scanning can automatically identify the contents of the bar code, so as to get the information we want.From conforms to the whole system simple operation, friendly interface, flexible, and the requirement of practical, the realization of the qr code scanning software based on Android platform is based on Java development language, the eclipse as the main development environment, and use the Android comes with a local SQLite database, on the system using the MD5 encryption and other related technologies, using the handler thread control mechanism, and through the graying of images, a binarization parsing techniques related to parse the information in the qr code.The system has the historical records storage capability, auto-focus function. interface implementation, using the interface timing automatic refresh, and considering the users habits. Paper mainly introduced development background of this topic, development platform, the function and development process to be completed.Keywords: qr code; SQLite database; eclipse; camera;Android目 录引言 .11 系统综合概述 .21.1 开发背景和意义 .21.2 关于二维码 .31.3 开发工具简介 .32 系统需求分析 .82.1 可行性研究 .82.2 系统功能分析 .83 系统总体设计 .93.1 系统总体设计目标 .93.2 软件设计图 .93.3 数据库设计 .114 系统详细设计 .144.1 界面详细设计 .144.2 系统后台功能详细设计 .254.3 数据库详细设计 .325 系统测试 .355.1 测试简述 .355.2 测试方法 .355.3.具体测试过程 .36结论 .38致谢 .40参 考 文 献 .42防灾科技学院毕业设计1引言对于二维码(二维条码) 1,我们并不陌生,在移动平台上的应用更是广泛,比如微信的二维码扫描,比如我查查、快拍二维码等二维码应用,可以方便的查找商品的相关生产、保质等信息,还可以进行比价等,极为方便的追根溯源。在前不久的互联网大会上,二维码被称为是线上线下的一个关键的入口 2,二维码再度火了起来。如今社会技术发展迅猛,智能手机进入了每个人的手中,人们的生活节奏也在一步步的加快,信息的传递方式也在跟着发生变化,以往的方式都是直接阅读数据,信息都是直接传递,如今二维码给我们带来了新的传递方式,我们只需用手机轻轻一扫,所有的信息都会被记录下来,方便快捷了不少。用它也可以记录一个物体的发展状态,把每个状态都记录到二维码中,用来追踪货物或者记录物体信息,都是很好的方法,即快捷,又具有相当的安全性。本文我们将一起去探索二维码的神秘面纱,研究二位码的具体原理、识别方式、摄像头调用、数据获取、以及解码的实现。实现手机端的条码解码软件,准确快捷的获取二维码中包含的数据信息,呈现给用户。防灾科技学院毕业设计21 系统综合概述1.1 开发背景和意义二维码的起源是日本,原本是 Denso Wave 公司为了追踪汽车零部件而设计的一种条码 3。 手机二维码是二维码技术在手机上的应用。二维码是用特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的矩形方阵记录数据符号信息的新一代条码技术具有信息量大,纠错能力强,识读速度快,全方位识读等特点。最近几年,随着手机上网和智能手机硬件普及,消费者愈加重视互动和信息传播,加之二维码码制开源,参与成本低,它在中国才具备了爆发的背景条件。所谓二维码,基本上就可以理解为更加复杂的条形码(这只是一种比较简单的理解,事实上二维码也是一种条形码) 。条形码今天的应用相当广泛,但凡一个正规的商品都会印有一个条形码。不过所包含的信息远远不如二维码的丰富。不过,我们还是可以用条形码的发展来预测一下二维码未来会不会成为“线上线下关键入口” ,以及如何才能成为。条形码 4一开始的发明用途是用来做邮政单据分拣,它可以节省很多劳动力。后来被零售业广为采用的重要原因在于对货物的归类存放以及结算时价格识别,还包括销售情况的汇总清点。今天在超市购物,你很难想象如果一个商品背后没有条形码,结账时会发生什么情况:结算员又要输入货品名称,还有输入价格。前者还得遵守规范的货品名称不能乱输。没有条形码,几乎就可以说超市很难存在下去。二维码将会是移动互联网的关键入口,通过二维码可以很方便的传递数据,提高了数据的传输速率和安全性,用户只需扫描便可获取信息 5。它具有存储数据量大的特点,目前很多企业都在试图通过二维码来定义物品的传递流程,例如邮政行业的货物传递,以及一些高档农产品的生长过程都可以用条码来进行记录,这是一个存储信息和传递信息的良好渠道。当然二维码也能别用来传递不良信息,所以我们还需要提高自身素质,共同维护良好二维码世界,不容许不良信息的传递和滋生繁衍。防灾科技学院毕业设计31.2 关于二维码图 1.1 二维码如图 1.1 是一个完整的二维码。图 1.2 二维码简介每个 QR 码符号由名义上的正方形模块构成,组成一个正方形阵列,它由编码区域和包括寻象图形、分隔符、定位图形和校正图形在内的功能图形组成。功能图形不能用于数据编码。符号的四周由空白区包围。周围的三个点是用来定位图形的,每个条码都必须具备的定位点。二维条码中间会有很多的不规则的黑点,这就是存放的数据信息,通过解析便可以得到数据。1.3 开发工具简介1.3.1 eclipse 简介Eclipse 是著名的跨平台开源集成开发环境(Integrated Development Environment IDE) 。最初主要用来 Java 语言开发,目前亦有人通过 插件 使其作为 C+、Python、PHP 等其他语言的开发工具。防灾科技学院毕业设计4Eclipse 是一个开放源代码 的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Kit,JDK) 。Eclipse 就是一个平台,我们可以向其中打入任何插件,来达到提高工作效率的目的,同时也可以为其他语言服务,可以在此平台上完成许多的开发工作。开源性和可扩展性,使的 eclipse 成为一个非常强大的软件开发工具平台。图 1.3 eclipse 的各个版本和详细信息1.3.2 JDK 简介JDK(Java Development Kit)是 Sun Microsystems 针对 Java 开发员的产品。自从Java 推出以来,JDK 已经成为使用最广泛的 Java SDK。JDK 是整个 Java 的核心,包括了 Java 运行环境、Java 工具和 Java 基础类库。JDK 的三个版本,分别有不同的用途SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从 JDK 5.0 开始,改名为 Java SE。EE(J2EE),enterprise edition,企业版,使用这种 JDK 开发 J2EE 应用程序,从 JDK 5.0开始,改名为 Java EE。ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的 java 应用程序,从JDK 5.0 开始,改名为 Java ME。没有 JDK 的话,无法编译 Java 程序,如果想只运行 Java 程序,要确保已安装相应的JRE。1.3.3 SDK 简介防灾科技学院毕业设计5SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是 Android 专属的软件开发工具包 6。Android 是谷歌(Google )公司推出的手机开发平台 7。与 iPhone 相似,Android 8采用 WebKit 浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比 iPhone 等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部 Web 应用的单一平台。1.3.4 ADT 简介Android Development Tools在 Eclipse 编译 IDE 环境中,需安装 ADT(Android Development Tools)Plug-in,这是Android 在 Eclipse 上的开发工具。它讲 eclipse 和 android 的 sdk 拼接到一起,形成一个整体工具,起到了连接作用。目前 Android 开发所用的开发工具是 Eclipse,在 Eclipse 编译 IDE 环境中,安装ADT,为 Android 开发提供开发工具的升级或者变更,简单理解为在 Eclipse 下开发工具的升级下载工具 9。是整体开发中所用到的工具包,如果你不用 Eclipse 作为你的开发工具,你就不需要下载 ADT,只下载 SDK 即可开发 10。1.4 项目环境搭建1.4.1 硬件环境Cpu:intel core i3 2.7gGhz 及以上的处理器内存:4GB测试手机一部1.4.2 软件环境操作系统:windows 7开发软件工具:jdk-1.7、eclipse 、android SDK 16 Android 系统:android 模拟器 4.0.1 系统 111.4.3 详细环境搭建过程(1)首先电脑需要安装 jdk,下载 jdk,并进行安装,配置环境变量,在我的电脑右键-属性-高级配置- 系统变量防灾科技学院毕业设计6图 1.4 classpath 的路径图 1.5 java_home 的配置图 1.6 path 的配置(2)下载 eclipse,因为此软件是绿色软件,所以解压即可使用。(3)配置 ADT在 eclipse 中 help-install new software 防灾科技学院毕业设计7图 1.7 adt 的安装选择要安装的软件位置,然后下一步,最后会又一次重新启动,至此 ADT 已经顺利安装。(4)连接 android 的 SDK12图 1.8 sdk 的安装在 window 中 preferences 选择 android,再填写 android SDK 的位置即可,此时整个软件环境已经搭建完毕。可以顺利运行了。在此值得一提的是:android 的 SDK 和 ADT 有版本的匹配,需要对应的版本,在安装是需要注意下载相同版本的软件,这样才能顺利完成安装。防灾科技学院毕业设计82 系统需求分析2.1 可行性研究一个项目的开发需要仔细的分析,看它在目前的情况下是否可行,如果一个项目开发具有很好的意义,但在经济上或者技术上是不可行的,那么它也只能称之为不能实现的项目。首先在技术上是绝对可行的,参照其他相关软件可以得知,此软件是可以实现的。在操作上,也是可行的,二维码在国内应用引起了众多用户的兴趣,国内许多软件都在内置二维码扫描功能 13,并且只需一台手机对准二维码扫描就可以,所以操作上是可行的。2.2 系统功能分析(1)调用摄像头该功能主要是通过摄像头获取视频流,将获取到的视频流数据传递给下一级的解码过程。(2)解码该功能主要是通过 google 提供的开源的 xzing 的解码包,对摄像头获取到的视频流数据进行解码,并返回结果。(3)呈现结果该功能主要是获取解码后的结果,如果正确获取到结果,则呈现给用户,如果获取结果错误,则再次调用摄像头进行图像的获取,并解码(一个循环过程) 。(4)用户历史查询该模块的功能就是使用户可以查询自己以往的查询记录,历史记录都保存在本机数据库中。防灾科技学院毕业设计93 系统总体设计3.1 系统总体设计目标 经过可行性研究和需求分析阶段的工作,已经清楚系统必须完成的工作,下面的工作就应该是决定“如何做”的问题。概要设计的基本目的就是“概括地说系统应该如何实现” ,通过该阶段的工作将划分出系统的物理元素程序、文件、数据库、文档等,另一方面的主要工作是设计软件的结构,即确定系统都由哪些模块组成及模块之间的相互关系。3.2 软件设计图3.2.1 开发时间分配图 3.1 开发时间分配图这是软件时间分配情况图,将软件的开发分为不同的阶段,前期主要是收集了相关的资料,为开发做准备,然后制作了软件的 UI 界面部分,是界面尽量的人性化,最大程度的去符合人们的使用习惯,使用户使用更加舒服和贴切。最后完成了解码工作,软件防灾科技学院毕业设计10将摄像头采集到的数据流传输到后台的解码线程中,通过相应的解码技术完成解码,实现数据的显示。3.2.2 总体模块图 3.2 软件总体模块这是软件的总体功能图,软件整体分为两部风来进行开发,包括 UI 部分和数据解析部分UI 部分:主要是1.摄像头的预览功能2.关闭相机功能3.Activity 界面的自动绘制和定时刷新功能,主要是为了美观和符合用户的使用习惯。4.获取视频流数据在此需要主意的是数据的获取并不是拍照片,而是获取的视频流中的随意一帧数据,如果是照片是没办法得到数据的,只能通过摄像头的视频流来获取。防灾科技学院毕业设计11解码部分:1.开启子线程2.在子线程中进行解码操作3.返回解析出来的字符串数据,并显示3.2.3 总体功能图 3.3 软件总体功能图总体功能模块分别是:1.UI 界面的制作2.相机的打开和关闭3.视频流的获取4.子线程的开启5.解码操作的进行6.结果的返回3.3 数据库设计3.3.1 数据库设计概述防灾科技学院毕业设计12数据库设计 14:是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效的存取数据,满足各种用户的应用需求(信息需求和处理需求) 。软件没有用到服务器端的数据库,但使用了 android 自带的 SQLite 数据库 15。SQLite,是一款轻型的数据库,是遵守 ACID 的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百 K 的内存就够了。尤其在 android 中,手机的数据存储大部分是依赖于 SQLite 数据库。功能相对比较弱,是一个弱数据库,但使用相对方便,运行快捷,占用资源很小。在手机本地存放一些小型的数据,SQLite 数据库是一个不错的选择。SQLite 数据库简介 16:1. SQLite 支持的数据类型特别少只有 5 种,支持解析大部分数据类型转换到对应的5 中数据类型中。 2. 是个动态类型的数据库,字段的具体类型与其声明关系不大,主要依赖具体的输入值。如果类型声明为 Nemeric,但是输入的是字符串,该行的具体类型为字符串,经测试主键除外。支持随意输入的类型(转换为 NULL 类型) 。我所见过的所有数据库中最为特别的一个。 3. 多进程并发做的要比多线程好,3.3.1 版本开始才支持多线程。 4. 对 Alter 支持的不好,只支持 add 和 rename。 5. 通常情况下存在于磁盘中的数据库文件只会增长不会缩小,即使你删除了大量的数据。可以通过命令整理,需要花费较多的时间和两倍的原始空间。 6. 不支持 UNICODE,API 提供相应的扩展。 7. 事务处理效率低,不过对数据有一定的保护性。 8. 从 3.6.19 版本开始支持外键。9. 支持触发器,不支持存储过程 3.3.2 SQLite 数据库的使用防灾科技学院毕业设计13图 3.4 SQLite 命令行模式图首先跳转到自己的 SDK 所在的路径,然后通过 adb shell 命令来进入到手机的操作系统中。在通过 cd 命令行,进入到相应的软件包下的数据库中,进行增删改查的操作。具体命令如下:Adb shell 用来进入到 android 的 linux 内核中。Cd data/data/.sdax.android 这是进入到了软件的安装目录中。Cd databases 进入到软件的数据库文件所在的文件夹。SQLite3 barcode_scanner_history.db 这是进入到了软件本身所创建的数据库中。然后执行对应的增删改查就可以了。此数据库不需要 commit 提交,会自动提交。因为软件有一个历史查询功能,所以每次扫描到的数据需要存放到数据库中的表里面。如图 3.5 就是数据库的表详细设计字段。图 3.5 数据库表详细字段防灾科技学院毕业设计144 系统详细设计关于 android 的界面设计 17,android 是通过一个 xml 文件来控制页面布局的 18,这种文件是以标签语言的格式来控制要显示的控件,里面有相应的属性,是对控件大小、位置、或者颜色等属性的操作,使界面出现我们想要的效果。但这种 xml 文件不能有任何的功能,例如点击事件的触发。所以也需要 java 文件来控制。这就是 android 的界面机制 19。下面是详细的设计代码:4.1 界面详细设计4.1.1.欢迎界面图 4.1 欢迎界面这个软件的欢迎界面,当软件启动的时候显示的页面,其中蓝色是设置的背景颜色,上面布置一步图片,下一行是显示的软件欢迎信息: 欢迎使用防灾科技学院软件 1.0beta。此界面只能维持 1 秒钟的时间,然后会自动销毁。界面本身不会自动销毁,如果要实现此效果,需要添加时间控制。在此呢,我们使用了 Timer 类 20来进行控制。代码如下:防灾科技学院毕业设计16Timer timer = new Timer();timer.schedule(new TimerTask()public void run() Intent intent = new Intent(WelcomeActivity.this,CaptureActivity.class);startActivity(intent);finish() ;, 1000);最后的这个参数 1000 就是 1000 毫秒的意思,表示当时间达到 1 秒钟时,会自动执行其中的跳转操作。同时也会销毁当前的 activity。这样就达到了我们想要的效果,一个欢迎界面。4.1.2 主界面:当欢迎界面自动结束后,会跳转到我们的主界面。在本程序中,将主要的扫描界面和最后信息返回界面组合到了同一个 activity 中 21,这样的设计减少了 activity 的跳转,同时能达到同样的效果,但用户想退出时,只需按一次“回退键”即可退出程序。更加符合用户的操作习惯,使操作更加简单。下面是界面设计代码:此界面之所以能将几个页面放入同一个页面中,就是因为使用了 FrameLayout 这个布局,此布局会达到一种重叠效果,通过控制 android:visibility=gone这个属性 22,就可以调节界面显示的控件,可以隐藏一些控件,当扫面完成后,会显示其他的那部分控件,同时隐藏原有的控件。达到一个 activity 存放多个页面的效果。防灾科技学院毕业设计17这个控件是对扫描界面中的主界面。不是 android 自带的控件,而是自定义控件,我们可以自己用代码做一个界面,然后再 xml 中调用该界面,这也是一种推荐的作法,可以调高代码的控制能力,同时也便于后期的维护和修改。图 4.2 程序主扫描界面这个界面的具体实现类是:ViewfinderViewpublic ViewfinderView(Context context, AttributeSet attrs) super(context, attrs);/ 初始化一次,在 ondraw 方法中调用paint = new Paint();Resources resources = getResources();maskColor = resources.getColor(R.color.viewfinder_mask);resultColor = resources.getColor(R.color.result_view);frameColor = resources.getColor(R.color.viewfinder_frame);laserColor = resources.getColor(R.color.viewfinder_laser);resultPointColor = resources.getColor(R.color.possible_result_points);scannerAlpha = 0;possibleResultPoints = new HashSet(5);这是从上面介绍的 xml 文件中将内容获取到,然后实例化。防灾科技学院毕业设计18以下代码是进行页面绘制的程序,就是我们看到的一个蓝色的边框和中间的十字闪烁条,还有中间的字样,都是通过这里的 onDraw 方法来制作的 23。所有的界面都采用手动绘制的方式实现,而不是调用系统的原生控件。public void onDraw(Canvas canvas) Rect frame = CameraManager.get().getFramingRect();if (frame = null) return;int width = canvas.getWidth();int height = canvas.getHeight();这里是绘制蓝色的边框,用来提醒用户需要将条码放入到框体内才有效,蓝色边框是通过计算手机屏幕的宽和高,从而一点点的绘制出蓝色的边框。paint.setColor(resultBitmap != null ? resultColor : maskColor);canvas.drawRect(0, 0, width, frame.top, paint);canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint);canvas.drawRect(0, frame.bottom + 1, width, height, paint);if (resultBitmap != null) paint.setAlpha(OPAQUE);canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint); else paint.setColor(frameColor);canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);canvas.drawRect(frame.left, frame.top + 2, frame.left + 2, frame.bottom - 1, paint);canvas.drawRect(frame.right - 1, frame.top, frame.right + 1, frame.bottom - 1, paint);canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);paint.setColor(laserColor);paint.setAlpha(SCANNER_ALPHAscannerAlpha);scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;int middle = frame.height() / 2 + frame.top;防灾科技学院毕业设计19canvas.drawRect(frame.left + 2, middle - 1, frame.right - 1, middle + 2, paint);int xMiddle = frame.width() /2 + frame.left ;canvas.drawRect(xMiddle - 1, frame.top, xMiddle+2, frame.bottom, paint) ;如下是主线程的过程控制图:图4.3 主线程过程控制图这里是绘制中间的十字闪烁条,用来起到瞄准的作用,给用户使用上的舒适感,尽可能的去满足客户习惯。同样,通过计算手机屏幕的宽和高,确定绘制的位置。但这里不仅是简单的绘制,还需要控制它的透明度的变化,从而达到我们看到的闪烁的效果。Path path = new Path() ; RectF rect = new RectF(xMiddle-60, middle-5, xMiddle, middle);Direction direction = Direction.CW ;path.addRect(rect, direction);这里是绘制了上面的防灾科技的字样。固定了位置,通过 drawTextOnPath 的方法来写字。防灾科技学院毕业设计20canvas.drawTextOnPath(防灾科技, path, 0, 3, paint) ;Collection currentPossible = possibleResultPoints;Collection currentLast = lastPossibleResultPoints;if (currentPossible.isEmpty() lastPossibleResultPoints = null; else possibleResultPoints = new HashSet(5);lastPossibleResultPoints = currentPossible;paint.setAlpha(OPAQUE);paint.setColor(resultPointColor);for (ResultPoint point : currentPossible) canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 6.0f, paint);if (currentLast != null) paint.setAlpha(OPAQUE / 2);paint.setColor(resultPointColor);for (ResultPoint point : currentLast) canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 3.0f, paint);postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top, frame.right, frame.bottom);4.1.3.菜单事件当点击手机的菜单按钮时,会弹出历史和关于两个菜单按钮,可供用户选择,当用户点击不同的按钮后会有不同的跳转事件。防灾科技学院毕业设计21图4.4 菜单事件public boolean onCreateOptionsMenu(Menu menu) super.onCreateOptionsMenu(menu);menu.add(0, SHARE_ID, 0, R.string.menu_share).setIcon(android.R.drawable.ic_menu_share);menu.add(0, HISTORY_ID, 0, R.string.menu_history).setIcon(android.R.drawable.ic_menu_recent_history);menu.add(0, SETTINGS_ID, 0, R.string.menu_settings).setIcon(android.R.drawable.ic_menu_preferences);menu.add(0, HELP_ID, 0, R.string.menu_help).setIcon(android.R.drawable.ic_menu_help);menu.add(0, ABOUT_ID, 0, R.string.menu_about).setIcon(android.R.drawable.ic_menu_info_details);return true;在此如何实现不同的跳转呢,就是通过如下方法,intent 是 android 用来实现跳转的一个非常好用的方式,通过 intent 可以跳转到我们想要的任何页面。public boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case HISTORY_ID: 防灾科技学院毕业设计22AlertDialog historyAlert = historyManager.buildAlert();historyAlert.show();break;case ABOUT_ID:AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle(getString(R.string.title_about) + 1.0beta);builder.setMessage(getString(R.string.msg_about) + nn + getString (R.string. zxing _url);builder.setIcon(R.drawable.launcher_icon);builder.setPositiveButton(R.string.button_open_browser, aboutListener);builder.setNegativeButton(R.string.button_cancel, null);builder.show();break;return super.onOptionsItemSelected(item);通过一个 swith 语句可以判断用户所点击的按钮,如果是 HISTORY_ID 的话,说明点击的是“历史” ,那么就会跳转到历史记录的页面。如果点击的是 ABOUT_ID 的话,说明点击的是“关于” ,那么就会自动挑战到软件是说明界面。这是一个 dialog 对话框,通过构建者模式建立的,其中的 setTitle 方法是用来设置对话框标题的 23,setMessage 是用来设置弹出的具体消息内容,setIcon 用来设置对话框的显示图片, setPositiveButton 和setNegativeButton 是用来显示最下方的两个按钮。一个是打开浏览器,另一个是取消。如下图所示:防灾科技学院毕业设计23图 4.5 关于信息4.1.4 历史记录当点击历史时,会根据 swith,通向 HISTORY_ID,从而打开历史记录页面的选择界面,会弹出一个对话框,里面是一个 listview 的形式 24,存放着用户以往的扫描历史,当用户点击想要查看的记录是,会跳转到相应的 activity,activity 中显示的都是从数据库中拿去来的数据,是用户以往扫描的结果。这是向数据库中查询以往的历史记录。通过 db.query 这个方法 25,可以查询到数据库中的历史数据,并返回一个 cursor 游标,通过此游标的 moveToNext() 方法 26,可以移动游标,从而提取出数据库中所有的历史记录信息,从而显示到 UI 的 activity 上,是用户可以看到,并且通过如下的 getHistoryItems 方法可以获取到历史记录的每一行信息,从而为每一行添加一个点击事件,可以用来触发跳转。 List getHistoryItems() SQLiteOpenHelper helper = new DBHelper(activity);List items = new ArrayList();SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = null;try cursor = db.query(DBHelper.TABLE_NAME,GET_ITEM_COL_PROJECTION,null, null, null, null,防灾科技学院毕业设计24DBHelper.TIMESTAMP_COL + DESC);while (cursor.moveToNext() Result result = new Result(cursor.getString(0),null,null,BarcodeFormat.valueOf(cursor.getString(1),cursor.getLong(2);items.add(result); finally if (cursor != null) cursor.close();db.close();return items;这是对话框的生成代码,封装成了一个方法,在这个对话框中,不只设置了内容,还设置了点击事件 DialogInterface.OnClickListener,通过 builder.setItems(dialogItems
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国反丁烯二酸行业产业运行态势及投资规划深度研究报告
- 2025至2030中国凤爪行业深度分析及发展趋势与产业运行态势及投资规划深度研究报告
- 2025至2030中国农药机械批发行业产业运行态势及投资规划深度研究报告
- 杭州隧道管理办法
- 情报产品管理办法
- 拆迁小区管理办法
- 投诉管理办法模板
- 待岗脱岗管理办法
- 扶风档案管理办法
- 林业管理办法规定
- 2025年云南省高考政治试卷(含答案解析)
- 2025年甘肃省高考物理试卷(含答案解析)
- 2025年山东省财欣资产运营有限公司人员招聘笔试参考题库附带答案详解
- GB/T 45309-2025企业采购物资分类编码指南
- 23G409先张法预应力混凝土管桩
- 《建筑施工模板安全技术规范》JGJ162-2024解析
- 人教版新高考英语一轮复习 Science and Scientists 科学与科学家
- 燃烧器的常见故障及排除方法
- JJF 1950-2021 螺纹量规扫描测量仪校准规范
- 电站锅炉检验师考试复习题
- 居民分布式光伏发电接入系统方案编写模板及说明
评论
0/150
提交评论