• 6.79 MB
  • 2022-04-22 13:43:58 发布

基于安卓手机的无线数字化磁力仪毕业论文.doc

  • 44页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'本科毕业设计论文基于安卓手机的无线数字化磁力仪毕业论文目录第一章绪论11.1本文的研究背景和意义11.2研究现状21.3本文所做的工作21.4本文的组织结构2第二章相关技术介绍42.1Android平台42.1.1安卓平台特性42.1.2安卓平台架构42.1.3安卓Android市场52.1.4安卓应用程序模块62.1.5安卓平台优点72.2Android软件开发语言72.2.1Java语言72.2.2语言特性72.3Android开发环境82.4AndroidSocket通信原理介绍92.4.1Socket定义与分类92.4.2Socket的基本通信模型102.4.3Socket基本实现原理和方式102.5Java多线程11iv 本科毕业设计论文2.5.1多线程的定义112.5.2Java多线程的实现122.5.3线程的四种状态122.3.4线程的优先级、同步及阻塞122.6小结13第三章需求分析153.1功能分析153.1.1传输数据功能分析153.1.2数据处理功能分析153.1.3存储数据功能分析153.1.4波形绘制功能分析163.1.5历史数据删除功能分析173.2非功能需求分析173.3小结17第四章详细设计和实现184.1Android开发平台的搭建184.1.1JDK的安装184.1.2SDK的安装194.1.3Eclipse下载与安装204.1.4ADT插件安装及配置214.2系统研究思路234.2.1整机系统234.2.2软件流程图244.3软件界面图25iv 本科毕业设计论文4.3.1软件界面设计254.3.2软件按钮事件界面设计274.3.3软件运行消息提示设计284.4软件采用类284.5系统实现的软硬件平台344.6小结34第五章系统测试355.1测试目标355.2测试方案355.3测试环境355.4测试内容355.4.1功能测试355.4.2恢复测试365.4.3可用性测试365.4.4环境兼容性测试365.5测试结果375.6小结38第六章结论与展望396.1总结396.2展望39参考文献40致谢41毕业设计小结42iv 本科毕业设计论文iv 本科毕业设计论文第一章绪论1.1本文的研究背景和意义随着科学技术的不断进步,尤其是嵌入式硬件技术的飞速发展,促使电子产品给人们带来了很多便利,这些便利已遍布在人们生活中的方方面面,尤其是智能手机的飞速发展更是让人类的生活有了前所未有的巨大变化,智能手机以其高科技含量和越来越低的价位逐渐成为了当代青年的必不可少的科技产品。智能手机不仅为人们提供了大量的娱乐工具,而且在工作和学习中也伴演着重要的角色,人们的生活中已经无法缺少智能手机的使用。Google在2013年7月发布了关于智能手机使用情况的调查报告,报告中表明,智能手机在中国的普及率得正在迅速迅提升,从2012年的47%上升到现在的76.7%,几乎一半的中国居民已经使用智能手机。智能手机在存储能力、用户交互能力和CPU处理能力等功能上正在不断的提高,手机CPU已经从开始的单核发展为如今的八核,位数从32位到如今的64位,存储空间也从有开始的512M发展为128G,运行内存从开始的256M发展到如今的4G。智能手机越来越强大的硬件配置,为手机的强大的使用功能打下了坚定的基础。现今,主流智能手机操作系统现分为三大类,分别是Android操作系统、IOS操作系统和WindowsPhone操作系统,这三种主流操作系统中只有Android是为开源的操作系统,2013年年初IDC(国际数据中心)公布了智能手机销量的统计数据,该数据显示2012年第四季度,Android智能手机的销售量为1.598亿台,市场占有率为70.1%,排名第一,比去年同比增幅88%,并保持良好的上涨态势。到2014年第三季度Android以83.6%的市场占有率稳居移动操作系统市场之首,出货量为2.68亿,去年同期为2.06亿,市场份额由81.4%上升至83.6%。Android操作系统的开源发布使Android手机得到了空前迅速的发展,其广泛的应用性和高度的开放性使Android软件越来越多,2014年谷歌PlayStore的应用数量便达到了143万。这些应用不仅在界面色彩搭配上给人一种耳目一新的感觉,而且因为这些应用促使手机的功能越来越强大。Android手机的大范围普及普及必定会促使人们进一步考虑到如何利用Android手机的便携性实现在PC机上的娱乐和工作。将PC软件或游戏制作成Android应用具有广阔的的前景。因此,研究Android手机软件,开发Android手机软件,将安卓手机作为上位机来代替之前的PC机,将会给带来较大的实用价值,进一步给人们的工作和生活带来便利。40 本科毕业设计论文1.2研究现状纵观Android智能手机的发展历程,令人叹为观止的Android应用软件层出不穷,目前Android手机应用软件中比较成熟的软件,相对集中于游戏、影音娱乐、移动办公、图书阅读、摄影摄像、手机管理、新闻、智能家居等方面。手机应用软件大体上分为两类,即单机应用软件和交互应用软件,单机应用软件是指仅需要手机终端的支持就可使用的应用软件,如单机游戏、办公软件、摄影摄像、手机管理等。交互应用软件是指需要手机终端和其它终端或服务端共同支持的应用软件,如,地图应用软件、聊天工具、影视应用软件、网络游戏等,一般需要网络和相关服务器支持。智能家居,Google在2011年5月就提出过android@Home这个全新的概念,这个概念中将安卓手机作为控制中心,PC做为网关接收中心,安卓手机在任何时间、地点的发出的控制命令经互联网传输到PC后,由PC处理这些控制命令来控制家电。除此之外,安卓手机可以代替传统PC作为上位机,与特定硬件进行信息传输。1.3本文所做的工作本文首先分析了智能手机的发展现状,并选择了普及率最高和开源的Android智能手机为开发平台,研究了其系统构架和Socket通信,结合磁力仪Windows平台上位机软件,设计制作了Android端上位机应用软件,便于随时随地的使用分析数据,最后本文对此类应用软件的发展进行了展望。,本论文的主要工作如下:(1)(1)了解Android应用开发平台,并搭建Android应用开发平台。(2)(2)了解,掌握Android应用开发语言,即Java语言。(3)(3)编写磁力仪安卓手机端应用软件。(4)(4)对应用软件进行测试,调试。1.4本文的组织结构本文一共由六章组成,各章的结构安排如下:第一章:绪论。,包括本文的研究背景,研究现状,工作内容和文章结构。第二章:相关技术介绍。,包括Android平台介绍,安卓开发语言介绍,网络通信协议介绍。第三章:需求分析。,包括功能分析和非功能分析。第四章:详细设计和实现。,包括Android平台搭建,软件流程介绍,软件界面介绍和相关类介绍。40 本科毕业设计论文第五章:软件测试。,包括测试方法、,测试内容和测试结果。第六章:结论与展望。40 本科毕业设计论文第二章相关技术介绍2.1Android平台Android是专门为移动设备开发的平台,其中包括操作系统、中间件和核心应用等。Android最早是由AndyRubin创办,于2005年被Google收购。2007年11月5日,Google正式发布Android平台[1]。2.1.1安卓平台特性Android平台具有以下特性:允许重用和替换组件的应用程序框架;专门为移动设备优化的Dalvik虚拟机;基于开源引擎WebKit的内置浏览器;自定义的2D图形库提供了最佳的图形效果,此外还支持基于OpenGLES1.0规范的3D效果(需要硬件支持);支持数据结构化存储的SQLite;支持常见的音频、视频和图片格式(例如MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF);SM电话(需要硬件支持);蓝牙、EDGE、3G和WiFi(需要硬件支持);摄像头、GPS、指南针和加速计(需要硬件支持);包括设备模拟器、调试工具、优化工具和Eclipse开发插件等丰富的开发环境。2.1.2安卓平台架构Android平台主要包括Applications、ApplicationFramework、Libraries、AndroidRuntime和LinuxKernel几部分,如图2-1所示。ØApplications(应用程序)Android提供了一组应用程序,包括Email客户端,SMS程序,日历,地图,浏览器,通讯录等。这部分程序均使用Java语言编写。ØApplicationFramework(应用程序框架)无论是Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用ApplicationFramework。通过使用ApplicationFramework,不仅可以大幅度简化代码的编写,而且可以提高程序的复用性。ØLibraries(库)Android提供了一组C/C++库,它们为平台的不同组件所使用。开发人员通过ApplicationFramework来使用这些库所提供的不同功能。40 本科毕业设计论文图2-1Android平台架构ØAndroidRuntime(Android运行时)Android运行时包括核心库和Dalvik虚拟机两部分。核心库中提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。Dalvik虚拟机专门针对移动设备进行编写,不仅效率更高,而且占有更少的内存。ØLinuxKernel(Linux内核)Android平台使用Linux2.6版内核提供的核心系统服务,包括安全性、内存管理、进程管理等。2.1.3安卓Android市场安卓是Google公司开发的基于Linux内核的开源操作系统,它包含了移动设备工作所需的总和:包括操作系统、用户界面和应用软件。目前仅仅使用Linux操作系统的智能手机非常少见,但是基于Linux的Android操作系统正飞速的抢占市场份额。在移动产业飞速发展的今天,市场对智能手机的需求越来越大,如在现今大学校园中几乎人手一部智能手机,同时智能手机几乎每年换一部。随着移动互联网的用户规模的快速增长,安卓智能手机也在快速的发展中,其价格不断的创造历史新低,促使人人都能拥有一部智能手机。目前,智能手机已经成为人们休闲娱乐、生活办公、获取知识的一个重要移动终端设备,促使整个社会的智能手机产业链不断的完善,智能手机的功能在不断的强大,智能手机用户也在不断的增加。安卓系统飞速的发展归结于其强大的使用功能和源代码的开放,这表明只要有一定专业基础的人都可以在网上下载自己需要的安卓源代码并按自己的设计进行一定的修改,生成自己的应用。这一特点可以促使大量的个人、团队结合自己的开发能力和创意来修改制定自己独特的操作系统,做出富有人性化、创意化与个性化的安卓设备。如中国小米公司基于Android操作系统制作的MIUI系统已经超过1亿的使用量。从美国来看,2010年8月3日早间公布了安卓手机在美国市场销售量首次超过苹果iPhone,并且在美国智能手机销售市场中占27%的份额。对于其他国家,安卓智能手机主宰了欧洲主要市场的销售额,销售份额超过60%的国家包括::英国、西班牙、法国、意大利等国家。而对于中国市场,安卓手机已经占据上风,在现今的中国智能手机市场中,国内众多品牌占据了巨大的市场销售比例如:小米、魅族、华为、中兴、酷派、联想等,同时国内品牌手机正在不断的超越国外著名企业的销售额。40 本科毕业设计论文2.1.4安卓应用程序模块Android应用软件由Activity、Intent、ContentProvider、Service这4大模块构造而成[1]。本系统主要用的模块为Activity。其中Activity是最基本的模块,一般称为“活动”,在应用软件中,一个Activity通常就是一个单独的显示界面。换句话所,Activity代表一个用户所能看到的屏幕显示内容,主要用于处理应用软件的整体性工作,所有应用软件的Activity都继承于android.app.Activity类,该类是Android提供的基层类,其它Activity继承该父类后,通过父类的方法来实现各种各样的功能。在Android中,Activity拥有Running、Paused、Stoped和Killed四种基本状态。Runing为启动—个新Activity,启动后显示在屏幕最前端,处于栈的最顶端,此时它处于可见并可人机交互操作的激活状态。Paused为Activity被另一个透明Dialog样式的Activity覆盖时的状态。此时它依旧与窗口管理器保持连接,系统继续维护其内部状态,它仍然可见,但却失去了焦点,不能进行人机交互操作。Stoped为Activity被新的Activity覆盖并失去焦点,此时旧的Activity不可见,新的Activity可见,并可操作。KilledActivity被系统杀死并回收或者处于未启动状态。当一个Activity实例被创建、销毁或启动另一个Activity时,Activity在这四种状态之间进行相互转换,这种转换的发生依赖于用户对软件的操作。2.1.5安卓平台优点安卓平台拥有以下四种主要优点:(1)(1)开放性。安卓平台基于BSD协议,并鼓励开发人员共享自己的开发源码,同时也可以对自己的源码进行加密,这大大促进了安卓平台在现今市场中的发展。(2)(2)非垄断性。其他操作系统,如:微软公司的WindowsPhone和苹果公司的IOS,都是垄断性的。而安卓平台是非垄断性的,开发者可以制定自己的操作系统、制定自己的云计算和制定自己的应用商店。(3)(3)硬件跨平台。由于安卓平台的开放性和强大的兼容性,同一款应用软件可以是在不同厂商,不同型号的安卓手机或平板上正常运行。(4)(4)并行运行模式。安卓操作系统支持多任务操作,如:在打开音乐软件进行听歌时,可以打开办公软件,同时进行办公。2.2Android软件开发语言Android软件开发有多种语言,Java语言是编写Android40 本科毕业设计论文软件最常用的编程语言,本软件便是使用Java语言开发的。Java语言是于1995年由Sun公司推出的一种极富创造力的面向对象的程序设计语言,它是由有Java之父之称的Sun研究院院士詹姆斯·戈士林博士亲手设计完成的,并完成了Java技术的原始编译器和虚拟机[2]。Java语言由美国SunMicrosystems的TamesGoslin等人发明的一种面向对象程序设计语言,支持封装性、多态性和继承性。2.2.1Java语言Java语言的出现是源于对独立平台语言的需求,这种语言要求所编写的程序不会因为芯片的变化而发生程序无法运行或出现运行错误。目前Java语言的优势越来越明显,并且已经成为网络时代一门非常重要的编程语言,同时也是目前十分流行的高级程序设计语言,仅次于C语言,特别适合于网络应用程序的开发。2007年11月5日,已经成长为互联网领域内巨人的Google发布了一款Android手机操作系统平台。Android采用JDK(Java开发工具包)的替代品,同时采用Dalivk虚拟机来替代JVM虚拟机(Java虚拟机),由此可以得出Java语言是Android编程的核心,在Android应用中的流程处理、算法、网络等都是由Java语言编写的。2.2.2语言特性Java语言具有以下特性:简洁性:Java语言是从C++延生而来,其语言风格与C++相似但是比C++使用简单,Java语言删掉了C++中一些不是绝对必要的事物,比如头文件、结构、指针、联合、隐式的类型转换和操作符重载等。安全性:Java语言中,一切对内存的访问都是通过对象实例来实现的,是为了防止用户在网络系统或分布系统的环境下使用木马等不安全手段访问对象的私有项目或文件。并且Java语言不支持C语言的内存单元指针,在C语言中是通过符号指针来引用内存单元指针,通过符号指针来引用内存,符号指计在Java运行系统运行时被解释为实际内存地址,同时Java语言提供了专门的内存管理机制来管理内存地址。同时,Java语言在码的传输中使用了公开密钥加密机制来保证数据安全,并且在运行环境中提供了四级安全保障机制(字节码校验器、运行时内存布局、类装载器、文件访问限制)。动态性:Java语言的类是通过动态装载入运行过程中所需要的类,这种方法可以解决C++在增加子类而没有编译时所出现的程序崩溃现象。同时Java语言的滞后联编机制可以重复利用面向对象编程风格的优点,实现了即插即用的功能。可移植性:使用Java语言编写的程序可以不经过任何修改就可以在不同的硬件和软件平台上运行,因此Java编译器所生成的可执行代码是基于Java40 本科毕业设计论文虚拟机实现的。高性能性:由于Java编译生成的字节码和机器码非常相近,因此Java语言的执行效率非常接近于C和C++的执行效率。多线程性:多线程指利用系统的空闲来执行一些常规过程,Java语言提供多线性语言支持,可以提高程序执行效率。就像安排不同人分别完成项目的不同任务,使项目的完成速度提高了很多倍,相当于提高了执行效率。分布性:Java语言是一种适用于网络通信的编程语言。Java语言提供的类库中支持TCP/IP通信协议,可以通过URL地址访问网络上资源。解释性:Java语言是通过解释来执行的,使用Java语言时,首先使用编译器将代码编译为字节码,然后通过Java解释器进行解释执行,相比于C++语言被编译为本地指令后执行有非常独特的区别。2.3Android开发环境本软件开发采用自由集成开发环境Eclipse,Eclipse最早是由IBM公司研发的,其前身为ffiM的VisualAge,后来IBM将Eclipse作为开放源代码的项目发布。Eclipse是著名的跨平台开源集成开发环境,主要用于Java语言开发,是世界上最大的开源组织的产品,Eclipse本身只是一个框架和一组服务,但是可以支持很多插件,也可以认为Eclipse中除了内核,其它所有的东西都是插件。在实际使用时,不仅可以使用原有的经典插件,也可以使用自己开发的特色插件,因此Eclips获得了许多软件开发商的钟爱。Eclipse的基础是客户机平台(即RCP)。RCP主要包括以下组件:用于启动Eclipse以及运行插件的核心平台、标准集束框架(OSGi)、可移植构件工具包(SWT)、用于文件缓冲,文本处理的文本编辑器(JFace)、Eclipse工作台(包括Workbench),,包含视图(views)、编辑器(editors)、视角(perspectives)、和向导(wizards)。Eclipse的开发环境组件包括::工作区(Workspace)、工作台(Wordbench)、透视图(Perspective)三个部分组成。工作区主要负责管理使用资源、统计便通知插件资源变化信息。工作台主要负责管理项目和资源,它还可以根据文档的类型选择合适的文档编辑器。透视图包括视图和编辑器,用户可以在多个透视图中进行切换编辑,其中常见的有JavaAVA透视图(JavaPerspective)、资源透视图(ResouecePerspective)、调试透视图(DebugPerspective)、小组同步透视图(TeamSynchronizingPerspective)。Eclipse还包含许多视图,通过它们可以从各个实业看整个项目,使得工程建立的更完美。40 本科毕业设计论文Eclipse具有三大优点:(1)(1)Eclipse是一个开放源代码的平台,任何个人或组织可以免费使用和获得该软件的特权。(2)(2)Eclipse具有可扩展性和可配置性,使用各种插件来构建开发环境,即是一个框架和一组服务。(3)(3)Eclipse可以实现对多重平台特性的支持。因此开发者可以使用自己擅长的平台,例如Windows、MacOS、Linux等。2.4AndroidSocket通信原理介绍Android操作系统具有HTTP通信和Socket通信两种常用的通信方式。其中HTTP连接只有用户请求时才会建立连接通道,即使用“请求——响应”的方式,客户端向服务器发送请求后,服务器端才向客户端返回数据。使用Socket通信时,首先双方之间建立的连接,即客户端连接服务端,连接成功后,可直接进行数据的传输,建立连接后便没有服务端和客户端的区别,即双方都可以主动发送信息,本论文中的所有通信都采用Socket实现。2.4.1Socket定义与分类Socket为接收和发送应用软件之间的数据的抽象层,应用软件可以通过Socket将软件添加到网络中,并且可与同一局域网中的其他应用软件实现网络通信。Socket为通信的应用软件提供了数据传输通道,并且提供了软件内部与外界通信的端口。Socket通信的实现根据不同的的底层协议可分为多种方式。本论文中仅用到了TCP/IP协议中的Socket内容。其中流套接字(streamsocket)和数据报套接字(datagramsocket)是该协议中最为重要的Socket类型。在流套接字中采用TCP作为点对点通信协议,保证了字节流的可靠性。数据报套接字的数据打包发送服务采用UDP通信协议完成。其中,TCP协议是一种固定连线为基础的协议,TCP可以保证从一端数据送至另一端时,数据能够确实送达,而且抵达的数据的排列顺序和送达的顺序相同,因此,TCP协议适合可靠性要求比较高的场合。UDP协议是无连接通信协议,不保证可靠数据的传输,但能够向若干目标发送数据,接受发自若干源的数据。UDP是以独立发送数据包的方式进行。UDP协议适合于对数据准确性要求不高的场合。本文中的上位机应用软件均采用流套接字,即将TCP作为端对端协议的方式。40 本科毕业设计论文2.4.2Socket的基本通信模型图2-2为Socket通信的基本模型。左右两边的应用软件分别为装在服务端和客户端的平台上,应用之间通过底层的Socket套接字通信。而本论文中的服务端为上位机应用软件,即本论文需要做的Android软件,而客户端为硬件磁力仪,使用嵌入式编程编写的客户端,也是通过底层的Socket套接字通信。图2-2Socket通信基本模型。2.4.3Socket基本实现原理和方式基于TCP协议的Socket通信的基本原理和方式:服务器端首先生成一个ServerSocket对象,其参数为一个整型数,它表示一个未被占用的端口号,然后调用Serversocket的accept()方法来接收客户端发送的数据。当没有数据发送时,accept()方法处于堵塞状态,只有接收到数据后,可通过inputstream流(数据输入流)读取到所接收的数据。在客户端创建一个Socket对象,有两个参数,分别代表服务器端的IP地址和服务端设置的端口号,,Socket对象通过inputstream流来读取数据,获取服务器发送的数据,然后把需要发送到服务端的数据写入到outputstream流(数据输出流)中实现socket数据传输。图2-3为基于TCP协议的Socket通信流程图。图2-33基于TCP协议的Socket通信流程图2.5Java多线程世间万物都可以同时完成很所工作,例如,人体可以同时进行呼吸、血液循环、思考问题等活动。这种思想在Java中成为并发,而将并发完成的每一件事情称为线程[2]。本节是对Java线程的详细介绍。2.5.1多线程的定义多线程是一种允许在程序中同时执行多个指令流的机制,各线程之间是互相独立的,它与进程相同,各自拥有各自独立的执行空间,由操作系统进行分配,线程没有独立的存储空间,进程与线程共同分享一个存储空间。多线程的执行是并发的,并发是指在逻辑上可认为是同时发生的,但是在物理上并不是同时发生。由于CPU的运行速度非常快,用户根本无法察觉到线程在物理上的非并发效果,因此,在一般情况下可以认为各个线程是同时执行的。在一般情况下多线程之间的执行顺序是随机的,对于该次执行哪条线程从而带来的线程调度与同步等问题,将会交给专门的关键字机制来处理。40 本科毕业设计论文2.5.2Java多线程的实现Java多线程的实现方式有以下两种:Ø扩展java.lang.Thread类。继承于Thread类,使用时必需覆盖run()方法,即把将要执行的代码添加到run()方法中。这种方法有一个缺点,当该类已经继承另一个类后不能再继承该类。Ø实现java.lang.Runnable接口。Runnable接口只有一个run()方法,当某个类实现Runnable接口时需要重写该方法,即把线程要执行的代码写入该方法中。通过调用线程Thread对象的start()方法可以开启线程。对于Java来说,run()方法表示新线程所要调用的方法名称。因此,在Runnable上或Thread上调用run()方法仅仅是和普通代码一样执行,并不能启动新的线程。2.5.3线程的四种状态线程具有生命周期,其中最主要的有四种状态,分别为创建状态、可执行状态、死亡状态与阻塞状态。Ø创建状态:线程已经创建完毕,但start()方法未被调用,此时线程未启动。Ø可执行状态:线程可以执行,但不一定处于运行状态。CPU的占用时间随时可以分配给该线程。Ø死亡状态:正常情况下run()方法执行完毕后就表示该线程的死亡。除此之外也可以调用stop()或destroy()方法使正在运行的线程结束。但不建议使用这两种方法,因为stop()方法可能会产生异常,而destroy()方法是强制终止,它不会释放锁,会导致其它线程也无法得到执行时间。Ø阻塞状态:此时线程无法执行,因为CPU不会为其分配执行时间。2.3.4线程的优先级、同步和阻塞(1)(1)线程优先级。线程的优先级用来指定该线程的优先执行顺序,即当多个线程同时进入可执行状态时,这些线程会等待CPU分配执行时间,获取执行权的概率通过优先级来决定。其中Thread类的setPriority()方法用于设置线程的优先级,getPriority()方法用于获取线程的优先级。(2)(2)线程同步机制。在同一个进程中,会有多个线程同时使用同一个存储空间,这种共享方式虽然节约了系统资源但同时带来了访问冲突的问题,在Java中为了有效的避免该冲突,采用synchronized关键字机制,包括两种用法:synchronized方法和synchronized块。Øsynchronized方法:在声明方法时通过添加synchronized关键字来指定此方法为synchronized方法。在此方法中对于每个类的实例都会有一把相应的锁,40 本科毕业设计论文synchronized方法必须获得相应实例所对应的锁才能调用这个方法,在此之前这个方法所属线程处于阻塞状态,方法一旦执行,该线程就占用这个锁,当此方法执行结束后才会释放这个锁。这种方式解决了变量的访问冲突问题,它保证了同一时间中,每个类实例仅有一个声明为synchronized的成员函数处于可执行状态。Øsynchronized块:采用synchronized关键字来声明synchronized块。Synchronized块必须获得syncObject对象的锁后才能进入执行状态,使用的机制于前面所述相同。这个方法可以使用在任意代码块中,同时也可指定任意上锁的对象,具有较高的灵活性。(3)(3)线程的阻塞。Java引入的同步机制虽然成功的解决了共享存储区域的访问冲突问题,但当任意时刻所需要的资源未准备就绪,或同一时刻有多个资源处于准备状态。因此Java引入了阻塞机制来解决此问题,阻塞是指暂停当前正在执行的线程,等待资源准备就绪。Java提供了多种方法支持阻塞机制,这些方法包括:Øsleep()方法:sleep()方法使用毫秒为单位的时间段作为参数,在这个时间段内,线程保持阻塞状态,CPU无法分配执行时间给该线程,当指定的时间过去后,线程重新进入可执行状态。一般情况下,sleep()用于等待某个所需资源的就绪,当使用时发现执行条件不符合,该线程将进入阻塞状态,一段时间后再次执行,直到条件符合为止。Øsuspend()和resume()方法:这两个方法需要搭配使用,suspend()方法使线程进入阻塞状态,直到对应的resume()方法调用后,该线程才会再次进入可执行状态。一般情况下,suspend()与resume()用于等待另一个线程产生的结果,如果发现结果未获取,线程将进入阻塞状态,直到获取另一个线程所执行的结果后,才可调用resume()方法使线程进入可执行状态。Øyield()方法:该方法使当前线程放弃已得到的CPU占用时间,线程此时处于可执行状态,随时可再次得到CPU使用时间。使用yield()方法得到的效果类似于延迟该线程的CPU占用时间,将CPU的使用权先交给另一个线程,使另一个线程先执行。Øwait()和notify()方法:一般情况下这两种方法协同使用,wait()方法可使线程进入阻塞状态,该方法是个重载方法,不带参数。另一种方法是将一段时间作为参数,其单位是毫秒。使用第一种形式时,若要使该线程重新进入可执行状态,则需满足超出指定时间后或采用对应的notify()方法进行调用,第二种方式则必需等待对应的notify()被调用。40 本科毕业设计论文2.6小结本章对整个软件功能实现的理论基础做了主要阐述,其中包括Android系统的发展与历史、Android开发平台的基本架构、五大应用程序组件,并详细介绍了Socket通信的基本原理与实现方法,最后描述了Java多线程的特性与实现方式。40 本科毕业设计论文第三章需求分析3.1功能分析本论文的Android应用软件功能主要包括五部分:传输数据、数据处理、存储数据、波形绘制和、历史数据删除等功能,以下是对各个个部分功能的分析。3.1.1传输数据功能分析硬件磁力仪和和磁力仪手机端软件通过无线wifi硬件连接后,在软件中通过SocketTCP协议成功连接,其中手机端为服务器,磁力仪为客户端。手机端向磁力仪发送start命令开始准备传输数据,然后,将进入循环传输数据,每个采样周期内,手机向磁力仪发送transform命令,磁力仪向手机端发送1440个字节的数据,。完成数据传输。通过采样周期循环发送transform命令和1440个字节数据。3.1.2数据处理功能分析手机端软件对收到的1440个字节数进行变换处理,将紧挨着的每没4个字节作为一个数据,一共为1440/4=360个数据,这360个数据分别为处理后的X、Y、Z三个方向的磁场值,每个方向为120个数据。然后将X、Y、Z三个方向的磁场值进行均方和求出M的120个值。。3.1.3存储数据功能分析存储数据分为文本文件存储和二进制文件存储。其中文本文件存储是对处理后的480360个数据进行存储,二进制存储是对接收到的1440个字节进行存储。如图3-1所示为文本文件存储方式。每行一共有四个数据,第一个数据为保存数据的时间周期,第二个到第五四个数据分别为X、Y、Z、M四个磁场值,每一个时间周期可以保存120组数据。如图3-2所示为二进制存储方式。每行数据为接收到的1440个字节转化为字符串的结果,每一个时间周期可以保存一行数据。40 本科毕业设计论文图3-1文本文件图3-2二进制文件3.1.4波形绘制功能分析对处理后得到的480360个数据,进行波形显示。如下图3-31所示,为预想绘图区域。其横坐标为0~120,代表120个点。纵坐标为-20000~20000mV代表磁传感器的采集范围。此区域一共绘制四路波形,分别为X,Y,Z,M。四路波形用不同的颜色表示,其中X轴为黑色,Y轴为红色,Z轴为橙色,M轴为蓝色。图3-31波形显示区域3.1.5历史数据删除功能分析将保存的文本数据及其存储路径生成列表,选中当前项进行删除,便可删除历史数据。如图3-42所示,列表区域为历史数据文件的保存时间和存储路径,长按列表选项,出现删除对话框,用于删除该历史数据。图3-42删除历史数据40 本科毕业设计论文3.2非功能需求分析为了更好的进行人机交互操作,需要设计很多消息提示或对话框提示。在比如:软件打开后进行wifi是否连接对话框连接提示,磁力仪与磁力仪手机端软件连接状态消息提示,是否退出软件对话框提示,是否删除数据对话框提示,数据是否删除成功消息提示等等。便于人机交互使用。3.3小结本章节对磁力仪手机端软件的功能需求和进行分析并且也对非功公能需求进行了分析。详细的进行了软件需求设计,在软件实现的过程中,首先确定了研究思路,为之后的软件的间具体设计和测试提供依据。40 本科毕业设计论文第四章详细设计和实现4.1Android开发平台的搭建搭建Android开发平台首先需要准备JDK、ADT插件、Eclipse的安装,,这些软件都可在网上下载。4.1.1JDK的安装打开浏览器,进入Oracle官方主页,地址“http://www.oracle.com/index.html”,进行JDK安装包的选择和下载。下载完适合自己系统的JDK版本后,就可以进行安装了。下面是以Windows系统为例的安装步骤:Ø双击刚刚下载的JDK程序,弹出如图4-1所示的JDK安装向导框,单击“下一步”按钮。Ø在打开的如图4-2所示的对话框中,单击“更改”,选择安装位置。图4-1JDK安装向导对话框图4-2JDK安装功能及位置选择对话框Ø单击“下一步”按钮,开始安装。如图4-3所示。Ø弹出如图4-4所示的JRE安装路径选择对话框,单击“更改”按钮,修改安装路径。图4-3JDK安装进度窗口图4-4JRE安装路径选择对话框Ø单击“下一步”按钮进行安装,直到安装完成。如图4-5所示。图4-5JRE安装进度窗口4.1.2SDK的安装在AndroidSDK中,包含模拟器、教程、API文档和示例代码等内容,以下是AndroidSDK的下载和安装步骤。Ø打开浏览器,进入Android开发者官方主页,地址是“http://developer.android.com/index.html”。40 本科毕业设计论文Ø单击“SDK”选项卡,选择“installer_r16-windows.exe”下载。如图4-6所示。Ø安装好下载的SDK文件。安装完成后的窗体如图4-7所示。图4-6AndroidSDK下载页面图4-7安装完成窗口Ø单击“Finish”按钮,启动SDK管理工具。此时会自动联网搜索可以下载的软件包。选择自己想安装的Android版本,然后点击“InstallXpackages”安装。如图4-8所示。Ø安装好后,在AndroidSDK管理器界面上你所选的包后面会显示“Installeed”,表示已经安装好了。如图4-9所示。图4-8获取可以下载的软件包图4-9软件包安装完成4.1.3Eclipse下载与安装在制作安卓软件时,可以使用Eclipse与ADT插件组合开发,以下是Eclipse软件的下载和安装过程。Ø打开浏览器,进入Eclipse官方主页,地址是“http://www.eclipse.org”。Ø单击“DownloadEclipse”链接。根据读者的操作系统不同,在“EclipseIDEforJavaDevelopers”标签右侧选择适当的版本。如图4-10所示。Ø单击“Download[China]BeijingInstituteofTechnology(http)”链接进行下载。如图4-11所示。图4-10Eclipse官方主页图4-11Eclipse版本选择页面Ø下载完成后,进行安装。4.1.4ADT插件安装及配置Google专门为Eclipse开发了一个插件来辅助开发,即AndroidDevelopmentTools(ADT),以下是该插件的安装和配置。Ø启动Eclipse,单击“帮助”菜单。Ø单击“InstallNewSoftware...”菜单项。如图4-12所示。单击“Add...”按钮,显示增加仓库对话框。在“Name”栏中,输入“ADT”,“https://dl-ssl.google.com/android/eclipse/”网址。单击“确定”按钮联网查找可用软件包。如图4-13所示Ø40 本科毕业设计论文图4-12安装新插件窗口图4-13增加仓库对话框Ø安装搜索到的软件包,在安装完成后会要求重新启动Eclipse。单击“RestartNow”按钮完成安装。Ø在重启Eclipse后,会显示ADT插件的配置页面。如图4-14所示。Ø选择“UseexistingSDKs”,然后选择下载好的SDK位置,单击“下一步(N)>”按钮,显示下图的统计数据对话框,单击“完成(F)”按钮完成配置。如图4-15所示。图4-14ADT插件配置页面图4-15ADT插件统计数据窗口Ø单击Eclipse工具栏上图标,显示AVD管理工具对话框。如图4-16所示。Ø单击“New...”按钮。在“Name”栏中输入“AVD4.0.3”,在“Target”栏中选择“Android4.0.3-APILevel15”,在SDCard的“Size”栏中输入256,在Skin的“Built-in:”栏中选择“WSVAG”,其他使用默认设置。单击“CreateAVD”按钮完成创建。如图4-17所示。图4-16AVD管理工具对话框图4-17创建AVD对话框Ø创建完Android虚拟设备后。单击“Start...”按钮,在新对话框中单击“Launch”按钮。如图4-18所示。Ø启动Android模拟器,效果如下图4-19所示。图4-18AVD管理工具窗体图4-19Android模拟器效果图4.2系统研究思路磁力仪手机端软件与磁力仪通过wifi连接,传输数据。软件磁力仪手机端对传输接收的数据进行处理,将处理后的数据用于波形显示,数据存储等后,用来观测。40 本科毕业设计论文4.2.1整机系统方案一:手机建立wifi热点,磁力仪连接手机共享的wifi热点,两者建立局域网。手机端为服务器,磁力仪为客户端,进行数据传输。如图4-20所示示为系统整体框图。方案二:路由器建立wifi热点,磁力仪和手机都连接上路由器建立的wifi热点,三者建立局域网。手机端为服务器,磁力仪为客户端,进行数据传输。如图4-21所示为系统整体框图。图4-20两者建立局域网图4-21三者建立局域网4.2.2软件流程图在完成系统整体设计后,就要考虑软件的流程图,来为软件编写准备资料。在需求分析中,分析了软件的基本需求为传输数据、数据处理、存储数据、波形绘制、历史数据删除等功能。因此在流程图设计时,要考虑以上需求。最终设计的流程图如图4-22所示。软件进入主线程后,载入软件主界面,此时会等待客户端的连接,如果在等待过程中,有客户端连接,则进入客户端线程,进行传输数据,数据处理,存储数据和波形绘制。在按钮事件中,可以进行历史数据删除。。图4-22软件流程图4.3软件界面图磁力仪手机软件主要包括四个界面,分别为启动界面、主界面、历史数据界面和保存路径选取界面。以下是对这四种界面采用不同的布局方式,本小节将详细讲解各个界面的设计及其人机交互。软件的整体界面布局的描述,各种事件响应的软件界面变化的详细描述。4.3.1软件界面设计如图4.4.1所示,启动界面采用LinearLayout布局方式布局,如图4-23所示。启动界面是本软件打开时出现的第一个画面,,和很多安卓软件一样,这个界面只是个过渡界面,维持一秒后,消亡,此时软件会启动然后进入下一40 本科毕业设计论文主界面个界面。主界面采用TableLayout布局方式布局,如图4-24,4-25,4-26所示。主界面是软件采用LinearLayout布局方式布局。下图4.4.2,4.4.3,4.4.4是主界面,的主体界面,几乎所有的软件操作都在主界面中进行这个界面包含了软件的所有功能。主界面的上半部分是保存数据时间和波形显示,其中保存数据时间是在保存数据时随着采样周期变化,波形显示分为四路波形,分别为X,Y,Z,M,四路波形使用不同的颜色表示,其中X轴为黑色,Y轴为红色,Z轴为橙色,M轴为蓝色。主界面的下半部分通过下部的三个按钮(波形显示、调零/存储、参数设置)进行切换。下面将对其进行详细介绍:(1)参数显示界面:此界面采用TableLayout布局。如图其中界面最底部的三个按钮,用来控制这三个界面下半部分的切换。图4-24所示为磁场参数显示界面下半部分,包括磁感应强度单位选择,本地磁场和磁场值的显示。其中磁感应强度单位包括nT、Gs、nOe,由于10000Gs=1T、1GS=1Oe,因此100000nT=1Gs=1000mOe。绝对值测量模式下磁场值显示的数据是由波形显示区域内每路波形120个点的平均值通过单位转换得到的,本地磁场值不显示数据;相对值测量模式下,软件会把当前的磁场值赋给本地磁场值,磁场值将显示测量磁场值与本地磁场值的差值。是用来显示磁场值(2),可以进行单位的选择,来改变显示值的大小。常用按钮界面:如图4-25所示为软件常用按钮界面图4.4.3下半部分是常用的一些按钮,包括“调零、复位”按钮,“开始保存、停止保存”按钮,“历史数据、保存至…”按钮,以及“帮助、关于我们”按钮。具体功能在下一节介绍。(3)参数设置界面:如图4-26所示为下半部分是参数设置界面,分别包括,保存文件类型、采样周期、测量模式和、本机IP。其中保存文件类型用于进行保存文件保存时文件类型的选择是数据文件保存,还是以二进制文件保存;采样周期是磁力仪向手机端软件传输1440个字节数据的周期,即每个周期传输一次数据;测量模式选择是查看数据的显示方式,分别为相对值和绝对值两种方式;本机IP是手机连上wifi后,手机分配到的局域网的IP地址,如果手机没有连接wifi,手机必须开启wifi热点,此时默认IP地址为192.168.43.1。图4-23过度界面图4-24参数显示界面图4-25常用按钮事件界面图4-26参数设置界面40 本科毕业设计论文4.3.2软件按钮事件界面设计保存路径选取界面采用LinearLayout布局方式布局,如图4-27所示。保存路径选取界面是通过“保存至…”按钮触发,此界面是对手机外存的所有文件夹进行列表,用于选择,选择完成后,点击“确定”按钮即可完成文件路径选取。历史数据界面采用LinearLayout布局方式布局,如图4-28所示。历史数据界面是通过“历史数据”按钮触发,用于查看以往保存数据的具体保存时间和保存路径,便于直观管理历史数据,对不需要的历史数据,可以长按列表项目,会出现删除对话框,用于选择是否删除此历史数据。首先介绍“开始保存”和“停止保存”按钮,这两个按钮用于保存数据的状态,当磁力仪与手机端软件通信正常时,触发“开始保存”按钮,此时,软件会根据设置的文件类型,采样周期,进行相应方式存储。在保存过程中,触发“停止保存”按钮,软件停止保存数据。图4.4.5和图4.4.6分别是“保存至…”和“历史数据”的按钮触发界面,这两个界面采用相同的布局LinearLayout。其中“保存至…”的按钮事件用于选择文件保存在手机外存的路径,图4.4.5是对手机外存的所有文件夹进行列表,用于选择,选择完成后,点击“确定”按钮即可完成文件路径选取。“历史数据”按钮事件用于查看以往保存数据的具体保存时间和保存路径,便于直观管理历史数据,对不需要的历史数据,可以长按列表,会出现删除对话框,用于选择是否删除此历史数据,见图3.3.2。图4-27“保存至”按钮界面图4-28“历史数据”按钮界面其它按钮界面采用对话框形式,如图4-29、4-30、4-31、4-32所示分别为是““调零””、““复位””、““帮助””和““关于我们””按钮对话框界面。““调零””按钮事件用于将磁传感器放入屏蔽筒中,将当前磁场值数据X,Y,Z三个轴的数据置零。““复位””按钮事件用于将磁场X,Y,Z三个轴的数据恢复到置零之前。““帮助””按钮事件显示软件的一些重要操作事项和注意事项。““关于我们””按钮事件显示软件版本信息和制作人信息。图4-29““调零””按钮对话框图4-30““复位””按钮对话框图4-31““帮助””按钮对话框图4-32““关于我们””按钮对话框40 本科毕业设计论文4.3.3软件运行消息提示设计图4-33为TCP连接状态消息提示框,即磁力仪与手机端的连接状态。在软件刚开始启动后,软件提示““等待磁力仪连接””,如果有一台磁力仪通过wifi成功连接软件,软件提示““一台磁力仪连接””,如果磁力仪断开wifi连接,软件提示““磁力仪断开连接,请重新连接””。如此,便于使用者观察磁力仪与手机端软件的连接状态变化。图4-33TCP连接状态4.4软件采用类Android软件中每一个界面都有相应的类来表示,这些类主要完成软件界面的人机交互操作和内部数据处理。由于软件采用Java语言编写,所以会编写很多类,表4-1是对软件所有界面对应类的名称和作用介绍。Android软件不仅仅有界面类,还有一些辅助软件完成整体运行的其它一些类,具体介绍如表4-2所示。编写软件时,编写的所有类和此类的作用表述。表4-1界面类名和方法类名称作用MainActivity启动过度界面类一秒后打开程序主界面WaveActivity程序主界面类线程(页面加载和TCP通信子线程)TCP连接,按钮触发事件,调用其他类完成软件程序完整体运行。FileBrowserActivityWaveView保存路径选取界面类绘图类获取手机内存文件夹名称,文件夹读写权限。绘制坐标轴,绘制4路波形HistoryDataAvtivityWiFiConnect历史数据界面类WiFi连接类显示历史数据的保存时间和保存路径,并可以对不需要历史数据进行删除。获取Wifi连接状态,获取ip地址FileService文件读写类手机内存写入文件,读取文件40 本科毕业设计论文FileAdapter手机内存文件夹选取界面获取手机内存文件夹名称,文件夹读写权限FileBrowserActivity表4-2其它类名和方法类名称作用AdditionClass附加类获取系统当前时间WaveView绘图类绘制坐标轴,绘制4路波形。WiFiConnectWiFi连接类获取Wifi连接状态,获取IP地址FileService文件读写类手机外存写入文件,读取文件(包括:新建文件夹、存储文件、追加文件、读取文件、删除文件,五种方法。)为了更详细的了解以上各类中所拥有的具体方法,下面将对启动界面类、主界面类和其它类进行详细介绍。以下是各个类的方法简介和部分核心代码。(1)(1)启动界面MainActivity类建立子线程,用来休眠一秒后,执行““打开主界面其他页面””事件。即打开图4.4.1界面1秒后打开图4.4.2界面。以下是子线程的核心代码:publicvoidrun(){try{Thread.sleep(1000);//休眠1秒}catch(InterruptedExceptione){e.printStackTrace();}Intentintent=newIntent(MainActivity.this,WaveActivity.class);startActivity(intent);//打开新界面finish();}(2)主界面类此类为软件的主类,运行软件的主界面类,包括软件主界面的按钮响应事件,TCP通信事件,数据处理事件,文件新建、追加、删除等触发事件。如下所述为TCP通信事件和数据处理事件:建立TCP通信子程序,完成软件的主要过程。此线程完成软件的数据传输,数据存储,波形显示等主要功能。程序开始建立端口为10000的服务端,对连接到该软件的客户端进行连接请求相应40 本科毕业设计论文,客服端连接成功后,首先进行数据传输,软件接收到客户端传输的1440个字节数,然后调用数据处理方法,对数据进行处理并得到有效的480个磁场数据值,将这些值调用绘制波形的方法进行波形路径绘制,在需要显示时,进行相应显示。在此过程中,需要存储数据文件,采用存储文件方法进行相应存储即可。核心代码如下:thread=newThread(newRunnable(){@Overridepublicvoidrun(){…serverSocket=newServerSocket(10000);//建立10000端口服务端…while(true){…socket=serverSocket.accept();//获取客户端bis=newBufferedInputStream(socket.getInputStream());bos=newBufferedOutputStream(socket.getOutputStream());beConnected=true;//连接状态bos.write(commandStart);//发送开始命令,客户端准备...bos.write(commandTransform);//发送传输命令intn=bis.read(dataByte);//读取输入流data=newString(dataByte,0,n)resolveData(dataByte);//数据处理showData();//得到磁场值的计算值…//绘制波形draw.set_x_array(arrayx);draw.set_y_array(arrayy);draw.set_z_array(arrayz);draw.set_m_array(arraym);draw.postInvalidate();//刷新…Thread.sleep(samplingPeriod);//延时…}}});数据处理方法。将软件接收到的1440个字节数,每4个紧挨着的字节数作为一个有效数据,通过左移、或等命令算出480个有效数据,接着对有效数据进行相应操作。核心代码如下:voidresolveData(byte[]dataByte){for(inti=0;i<120;i++){z=dataByte[i*12]&0xFF;z|=((dataByte[i*12+1]<<8)&0xFF00);40 本科毕业设计论文z|=((dataByte[i*12+2]<<16)&0xFF0000);z|=((dataByte[i*12+3]<<24)&0xFF000000);//恢复原数据x=dataByte[i*12+4]&0xFF;x|=((dataByte[i*12+5]<<8)&0xFF00);x|=((dataByte[i*12+6]<<16)&0xFF0000);x|=((dataByte[i*12+7]<<24)&0xFF000000);y=dataByte[i*12+8]&0xFF;y|=((dataByte[i*12+9]<<8)&0xFF00);y|=((dataByte[i*12+10]<<16)&0xFF0000);y|=((dataByte[i*12+11]<<24)&0xFF000000);x=x&0x00FFFFFF;y=y&0x00FFFFFF;z=z&0x00FFFFFF;factorX=x/8388608.0*10000-10000-valueOffSet[0]-valueLocal[0];//处理原数据factorY=y/8388608.0*10000-10000-valueOffSet[1]-valueLocal[1];factorZ=z/8388608.0*10000-10000-valueOffSet[2]-valueLocal[2];dataX[i]=factorX;dataY[i]=factorY;dataZ[i]=factorZ;dataM[i]=Math.sqrt(Math.pow(dataX[i],2)+Math.pow(dataY[i],2)+Math.pow(dataZ[i],2));//计算M值}(3)(2)AdditionClass类获取系统当前时间的方法nowData();此方法用于存储磁场数据时,数据文件的时间命名部分。(4)(3)WaveView类绘制波形方法,将具有120个数据的数组据传入,采用绘制路径的方法,将这120个数据绘制成一条折线,即波形图。具体产生路径的代码如下所示:privatePathwave(int[]arrary){intx=50;PathwavePath=newPath();//新建波形路径for(inti=0;i<120;i++){x=x+(width-50)/120;if(arrary[i]>20000){arrary[i]=20000;}elseif(arrary[i]<-20000){arrary[i]=-20000;}inty1=(int)((arrary[i]-20000)*20*y_dist/40000+drawHeigth);if(i==0){wavePath.moveTo(50,y1);//波形路径起点wavePath.lineTo(x,y1);//波形路径其他点,依次相连}else{40 本科毕业设计论文wavePath.lineTo(x,y1);}}returnwavePath;//返回路径}(5)(4)WiFiConnect类此类包括wfi连接状态判断和获取IP地址。Ø在软件开启后,会首先判断手机的wifi连接情况,如果wifi连接成功,便可以获取IP地址,具体代码如下:publicstaticbooleanisWiFiConnected(Contextcontext){ConnectivityManagerconnectManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkInfo=connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if(networkInfo.isConnected()){//判断连接状态returntrue;//返回连接状态}else{returnfalse;}}ØØ获取当前wifi连接的设备,所提供的IPip地址的方法getWifiIP(Contextcontext),具体代码如下:publicstaticStringgetWifiIP(Contextcontext){WifiManagerwifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);WifiInfowifiInfo=wifiManager.getConnectionInfo();intipAddr=wifiInfo.getIpAddress();//获取IP地址StringipStr=int2string(ipAddr);returnipStr;//返回IP地址}(6)(5)FileService类此类包括:新建文件夹、存储文件、追加文件、读取文件、删除文件,五种中方法。Ø在手机外存新建文件夹,首先判断存储卡的状态,然后新建文件夹。40 本科毕业设计论文此方法用于软件初始安装时,在手机外存新建“磁力仪”文件夹为默认存储路径,存储需要保存的数据。具体代码如下:publicbooleannewDir(Stringdir){booleanisNewDir=false;if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){//判断存储卡的状态Filefile=newFile(dir);if(file.exists()==false){file.mkdirs();//新建文件夹isNewDir=true;}}returnisNewDir;}ØØ向手机外存写文件。首先判断存储卡状态,然后存储文件,此方法在软件有两种用途。第一种为“开始保存”按钮事件触发后,第一个周期时,软件向手机外存新建文本文件或二进制文件并保存第一个周期的数据。第二种是用于保存数据存储日志文件,即当保存文本文件或二进制文件时,把此时的开始保存时间和保存路径信息保存在相应的日志文件中。核心代码如下:publicbooleansaveContentToSdcard(StringsavePath,StringfileName,Stringcontent){…FileOutputStreamfileOutputStream=null;Filefile=newFile(savePath,fileName);fileOutputStream=newFileOutputStream(file);fileOutputStream.write(content.getBytes());//写文件…}Ø向手机外存追加文件。首先判断存储卡状态,然后追加存储文件,此方法用于“开始保存”按钮事件触发后,除一个周期外,软件向手机外存已经存在的文本文件和二进制文件追加保存除第一个周期外的数据。直至“停止保存”按钮事件触发后,停止保存数据。核心代码如下:publicbooleanappendFile(StringsavePath,StringfileName,Stringcontent){…FileWriterfileWriter=null;fileWriter=newFileWriter(savePath+fileName,true);40 本科毕业设计论文fileWriter.write(content);//追加文件…}Ø向手机外存读文件。首先判断存储卡状态,然后追加读取文件,此方法主要用于“历史数据”按钮的触发事件,用于读取手机外村存的数据存储日志文件。核心代码如下:publicStringgetFileFromSdcard(Stringpath,StringfileName){…fileInputStream=newFileInputStream(file);intlen=0;byte[]data=newbyte[1024];while((len=fileInputStream.read(data))!=-1){outputStream.write(data,0,len);//读取文件}…returnnewString(outputStream.toByteArray());}Ø删除手机外存文件。首先判断存储卡状态,然后删除文件,此方法用于删除不需要的历史数据文件。核心代码如下:publicbooleandeleteFile(StringfilePath){…Filefile=newFile(filePath);if(file.exists()==true){file.delete();isDelete=true;}…returnisDelete;}Ø(6)WaveActivity类:Ø此类为软件的主类,运行软件的主界面类,包括软件主界面的按钮响应事件,TCP通信事件,数据处理事件,文件新建、追加、删除等触发事件。如下所述为TCP通信事件和数据处理事件:Ø建立TCP通信子程序,完成程序的主要过程。40 本科毕业设计论文此线程完成程序的数据传输,数据存储,波形显示等主要功能。程序开始建立端口为10000的服务端,对连接到该软件的客户端进行接受,客服端连接成功后,首先进行传输数据,即1440个字节数,调用数据处理方法,对数据进行处理后得到有效的磁场数据值,将这些值调用绘制波形的方法进行波形路径绘制,在需要显示时,进行相应显示。在此过程中,需要存储数据文件,采用存储文件方法进行相应存储即可。核心代码如下:thread=newThread(newRunnable(){@Overridepublicvoidrun(){…serverSocket=newServerSocket(10000);//建立10000端口服务端…while(true){…socket=serverSocket.accept();//获取客户端bis=newBufferedInputStream(socket.getInputStream());bos=newBufferedOutputStream(socket.getOutputStream());beConnected=true;//连接状态bos.write(commandStart);//发送开始命令,客户端准备...bos.write(commandTransform);//发送传输命令intn=bis.read(dataByte);//读取输入流data=newString(dataByte,0,n)resolveData(dataByte);//数据处理showData();//得到磁场值的计算值…//绘制波形draw.set_x_array(arrayx);draw.set_y_array(arrayy);draw.set_z_array(arrayz);draw.set_m_array(arraym);draw.postInvalidate();//刷新…Thread.sleep(samplingPeriod);//延时…}}});Ø数据处理方法。将软件接收到的1440个字节数,每4个紧挨着的字节数作为一个有效数据,通过左移、或命令算出360个有效数据,接着对有效数据进行相应操作。核心代码如下:40 本科毕业设计论文voidresolveData(byte[]dataByte){for(inti=0;i<120;i++){z=dataByte[i*12]&0xFF;z|=((dataByte[i*12+1]<<8)&0xFF00);z|=((dataByte[i*12+2]<<16)&0xFF0000);z|=((dataByte[i*12+3]<<24)&0xFF000000);//恢复原数据x=dataByte[i*12+4]&0xFF;x|=((dataByte[i*12+5]<<8)&0xFF00);x|=((dataByte[i*12+6]<<16)&0xFF0000);x|=((dataByte[i*12+7]<<24)&0xFF000000);y=dataByte[i*12+8]&0xFF;y|=((dataByte[i*12+9]<<8)&0xFF00);y|=((dataByte[i*12+10]<<16)&0xFF0000);y|=((dataByte[i*12+11]<<24)&0xFF000000);x=x&0x00FFFFFF;y=y&0x00FFFFFF;z=z&0x00FFFFFF;factorX=x/8388608.0*10000-10000-valueOffSet[0]-valueLocal[0];//处理原数据factorY=y/8388608.0*10000-10000-valueOffSet[1]-valueLocal[1];factorZ=z/8388608.0*10000-10000-valueOffSet[2]-valueLocal[2];dataX[i]=factorX;dataY[i]=factorY;dataZ[i]=factorZ;dataM[i]=Math.sqrt(Math.pow(dataX[i],2)+Math.pow(dataY[i],2)+Math.pow(dataZ[i],2));//计算M值}4.5系统实现的软硬件平台磁力仪手机端硬件需求为支持安卓系统的移动设备,主要硬件和系统要求为:(1)(1)CPU:600Mhz以上(2)(2)RAM:256MB以上(3)(3)ROM:100MB以上(4)(4)屏幕分辨率:960x*540以上。(5)(5)系统版本:安卓4.0.3以上版本。40 本科毕业设计论文4.6小结本章节介绍了安卓软件开发工具的下载,安装和开发环境的配置过程。,同时介绍了磁力仪手机端软件的设计流程设计,设计界面设计,和具体的代码实现。介绍了该软件运行所必须的手机硬件配置和系统版本。。以及,运行该软件的安卓手机基本硬件要求。40 本科毕业设计论文第五章系统测试5.1测试目标黑盒测试是一种经常使用的关于系统测试的方法,,即在测试过程中,,把被测试的软件看作一个黑盒,,在测试时不考虑软件的具体设计和其内部特征功能,,只需要知道软件如何输入输出或者只了解程序的具体功能。通过设计软件之前的需求分析来确定软件功能的正确性。通过逐步测试可以验证软件的基本需求是否达标,,同时可以快速找出需要修改的功能。系统的黑盒测试可以被用来证实软件功能的正确性和可操作性,对软件调试具有很大的帮助。5.2测试方案系统测试方案分为两步:第一步,采用电脑模拟磁力仪作为客户端,与磁力仪手机端进行通信,测试软件功能性,便捷性,兼容性,可靠性。第二步,与磁力仪硬件连接,测试软件功能性,便捷性,兼容性,可靠性。5.3测试环境硬件环境:IUNIU2(分辨率1920x1080)小米NOTE(分辨率1920x1080)魅族MX2(分辨率1280x720)优赛US6(分辨率960x540)系统环境:AndroidOS4.0.3以上。5.4测试内容软件的测试内容主要包括:功能测试,恢复测试,可用性测试和环境兼容性测试。40 本科毕业设计论文5.4.1功能测试功能测试主要内容包括::(1)(1)能否正常稳定启动本应用软件,与系统是否兼容。(2)(2)是否能够正常与电脑或磁力仪建立连接并接收数据。(3)(3)是否能够显示波形和存储数据。(4)(4)测试系统反应速度是否符合需求分析。5.4.2恢复测试恢复测试主要内容包括::(1)(1)网络连接断开后能否重新连接,并正常运行。(2)(2)非正常关闭软件后,再次运行时是否正常运行。5.4.3可用性测试可用性测试主要内容包括::(1)(1)各模块界面的人机交互性。(2)(2)应用反应是否灵敏,是否出现停滞现象。(3)(3)是否在用户进行某些操作时进行提示。(4)(4)是否可以显示帮助功能。5.4.4环境兼容性测试环境兼容性主要在不同品牌和不同分辨率的手机中进行测试,主要测试工具是为IUNIU2(分辨率1920x1080)、小米NOTE(分辨率1920x1080)、魅族MX2(分辨率1280x720)、优赛US6(分辨率960x540),判断中测试是否满足要求。如图5-1所示:图左为IUNIU2,图右为小米NOTE手机的软件测试图,可以看出,在不同品牌手机上软件运行正常。40 本科毕业设计论文图5-1IUNIU2和小米NOTE软件测试如图5-2所示:图左为魅族MX2,图右为优赛US6手机的软件测试图,可以看出,在不同分辨率的手机上软件运行正常。图5-2魅族MX2和优赛US6软件测试5.5测试结果(1)(1)功能性。在各模块中所有基础功能满足需求分析,实现了应用使用的基础功能。例如数据传输,数据处理,数据存储,波形显示都正常运行。因此实现了本软件的系统功能性。40 本科毕业设计论文(2)(2)便捷性。系统在软件的各个部分都添加了提示对话框或提示消息,与用户进行快捷的人机交互。例如:软件打开时,会提示等待磁力仪连接,此时用户可以根据提示“连接磁力仪”,在使用中途,突然断开连接,软件提示““磁力仪断开连接,请重新连接””,此时,用户需要重新连接,使软件恢复工作。整个软件界面采用按钮切换,响应速度快,并且不影响其他模块的进程,设计满足需求。实现了本软件的便捷性。(3)(3)兼容性。磁力仪手机端软件是基于安卓平台运行的,,在测试中用不同手机型号和不同的安卓版本进行测试,,结果表明此软件都可兼容,运行稳定、流畅,在不同分辨率手机中也可以正常显示,完美运行,实现了本软件的兼容性。(4)(4)可靠性。第一步,进行模拟测试时,手机端软件可以正确接收来自电脑发送的数据,在此时时间段内,手机端软件都能正常运行,正常接收处理数据,正常显示波形。第二步,进行手机端软件与磁力仪硬件连接后,正常显示数据和波形,在测试时间内,也都正常运行。5.6小结本章介绍了磁力仪手机端软件的测试,主要研究了测试的目标、测试的环境、测试的方案和测试的内容,得出结果和结论为:本软件系统满足需求分析的要求,基于安卓系统环境下本软件运行稳定,操作流畅,基本功能已经实现。40 本科毕业设计论文第六章结论与展望6.1总结通过调查与研究,深入了解需求所需问题,综合其它上位机软件的先进经验和不足之处,基于新形势下上位机软件的需求,使客户端运行在便携的安卓智能手机上,软件包含了数据传输、数据处理、波形显示、数据存储等功能。软件釆用的技术方案具有良好的可靠性和可操作性。但由于掌握的知识有限,软件设计还存在一些不足之处,主要体现在以下三方面::(1)(1)波形显示区域不能随心放大。(2)(2)历史数据,不能用波形显示,只能用文本查看。(3)(3)暂时只支持一个磁力仪的连接。6.2展望随着信息化程度的大范围普及,使用手机作为上位机的需求会随之普及,基于本文的Android平台的上磁力仪上位机软件是在新的、先进的模式下开发的软件,具有一定的先进性和可借鉴性。希望本软件的开发可以对Android平台上位机的软件的开发起到借鉴的作用,可以不断完善上位机软件的功能。对于论文中出现的问题及需要改进的部分,在今后的学习与工作中,将会对此做出进一步修正和完善,使其具有更加大的实用性和扩展性。40 本科毕业设计论文参考文献[1]明日科技.Android从入门到精通[M].清华大学出版社.2012.陈榕.关于3G手机移动软件运行平台的思考[J].核心技术白皮书.2005.[2]明日科技.Java从入门到精通[M].清华大学出版社.2012.肖梁军.基于Android智能终端的远程控制电脑系统与实现[D].云南大学.2012.05.[3]李刚.疯狂JAVAJava讲义[M].电子工业出版社.2013.[4]软件开发技术联盟.JavaWeb开发实战[M].清华大学出版社.2013.[5]张桂珠,刘丽,陈爱国等.Java面向对象程序设计[M].北京邮电大学出版社.2005.[6]韩超,梁泉,Android系统原理及开发要点详解[M].北京电子工业出版社.2010.[7]哈诺德.Java网络编程序[M].中国电力出版社.2005.[8]郭宏志.Android应用开发详解[M].电子工业出版社.2010.[9]李杨,冯刚,李亮等.基于Android的多媒体应用开发与研究[J].计算机与现代化.2011.[10]王家林,王家俊,王家虎.Android高级开发实战:UI、NDK与安全[M].电子工业出版社.2013.[11]公磊.基于Android的移动终端应用程序开发与研究[J].计算机与现代化.2008.[12]王东华.Android开发实例大全[M].电子工业出版社.2014.[13]肖梁军.基于Android智能终端的远程控制电脑系统与实现[D].云南大学.2012.05.明日科技.Java从入门到精通.清华大学出版社.2012.[14]陈榕.关于3G手机移动软件运行平台的思考[J].核心技术白皮书.2005.明日科技.Android从入门到精通.清华大学出版社.2012.40 本科毕业设计论文致谢值此论文完成之际,岁月如梭,光阴似箭,大学的四年生活也即将结束。在此回首四年的学习历程,对于在学习和生活中指导我、帮助我、激励我的人,我由衷的表示感激。首先,感谢**教授给予我的帮助,本论文的顺利完成,离不开老师的悉心指导和严格要求,老师具有渊博的专业知识、求实的工作作风、严谨的治学态度、诲人不倦的高尚师德、平易近人、朴实无华的人格魅力对我具有影响深远,这不仅让我树立了自己的学术目标,并且掌握了基本的系统的研究方法,同时让我明白了很多为人处世和待人接物的道理。本论文从选题到最终完成,每一步都是在李老师的悉心指导下完成的。在此,谨向李老师致以最崇高的敬意和衷心的感谢!感谢在四年的大学生涯中,每一位代课老师,正是由于他们孜孜不倦的教诲,才让我拥有了丰富的专业知识,来开始我人生的下一段旅程;感谢所有辛苦工作,所有精心安排学习与活动的老师们,感谢他们对我无私的教诲和亲切的关怀!感谢我的大学同学,同他们一起学习的日子里,不仅一起交流知识,而且一起分享生活中的幸福与快乐,祝他们在今后的人生道路中一帆风顺,事业有成!感谢我的家人对我求学路上的理解、支持与帮助,是他们的扶持与鼓励造就了我前进的动力,使我能够全身心的投入到学习与研究中去!最后向参与论文审阅、论文答辩的专家和教授以及支持、鼓励、关心和帮助过我的所有亲人、老师、朋友和同学表示由衷的感谢!40 本科毕业设计论文毕业设计小结毕业设计是以Android软件开发为核心的,即Java开发语言,在制作软件的过程中,学会了如何系统的分析一个项目,从需求开始,然后是整体分析,方案设计,设计流程,具体设计步骤,最后是测试,调试。在制作软件的过程中,需要了解、学习、掌握一些自己不会,但需要的知识。同时,制作软件时,会发现第一个设计方法不能满足自己的要求,此时就需要改变方法,反复验证,直到设计满足需求为止。在制作软件的过程中,最容易碰到的就是软件停止运行,此时很难发现导致软件停止运行的代码,需要对涉及到的代码,进行逐步注释,直到找到错误代码,进行修改,直到软件正常运行。在这个过程中需要极大的耐心和毅力,不能轻言放弃。在软件测试阶段,与磁力仪连接,进行数据测试,软件可靠性测试,需要运行几个小时,有时需要运行1天,来验证软件的可靠性。毕业设计不仅让我掌握了一门Java语言和Android软件的简单开发过程,同时让我学会了做事需要的态度和耐心。40'