毕业设计(论文)-基于Android手机的无线视频监控.doc_第1页
毕业设计(论文)-基于Android手机的无线视频监控.doc_第2页
毕业设计(论文)-基于Android手机的无线视频监控.doc_第3页
毕业设计(论文)-基于Android手机的无线视频监控.doc_第4页
毕业设计(论文)-基于Android手机的无线视频监控.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

装订线基于Android手机的无线视频监控二 一 四 届 毕 业 设 计基于Android手机的无线视频监控 学 院:信息工程学院专 业:电子信息工程姓 名:崔静学 号:2403100126指导教师:冯兴乐完成时间:2014年6月10日 二一四年六月摘 要随着无线网络技术、流媒体技术以及视频压缩技术的进步,视频监控系统的应用已经日益广泛和深入了。基于Linux操作系统的Android系统如今已经非常流行与稳定,并且它在监控领域也得到了很好的发展。本文设计了基于Android手机和无线局域网的远程监控系统,可以利用Android手机的摄像头即时采集图像信息并实时传送到PC服务端,PC服务端就可以对远端进行监控。本文设计了在Android手机客户端通过实现Camera.PreviewCallback接口,在其onPreviewFrame重载函数里面获取摄像头当前图像数据,然后通过无线网络传输把图像信息传送到服务器。PC端服务器采用Java语言编写,通过监听相应的端口,再获取数据后进行相应的命令解析和图像数据还原,然后将图像数据传递至ImagePanel控件中用于显示。通过这些基本的操作,就可以达到无线视频监控的目的。关键词 Android操作系统,无线网络,监控 ABSTRACTWith the development of wireless network technology, streaming media technology and video compression, the application of video monitoring system is becoming widely and deeply.The Android system based on Linux operating system has been very popularly and stably, and it also has a good development in the field of monitoring.This article designs the Remote Video Monitoring System based on Android mobile phones and WLAN, which can use the Android mobile phones camera to capture image information and transmit to the PC Server in time, at the same time, PC Server can monitor the distance.This article by implementing Camera.PreviewCallback interface in the Android mobile client ,and in its onPreviewFrame overloaded function to get the cameras current data, and then sends the image information to the Server through the socket. The PC Server uses Java language, by listening to the corresponding port to get the data and does some corresponding command to restore the image data, and then transmits the image data to the ImagePanel to display. Through this basic operation, we can realize the purpose of wireless video monitoring.KEY WORDS Android Operating System, wireless network, monitoring目 录第一章绪论11.1课题背景及意义11.2国内外发展现状和趋势11.3本文的设计思路2第二章 Android手机无线视频监控相关技术介绍32.1 Android手机开发平台32.1.1 Android手机开发平台基本介绍32.1.2 Android应用程序构成分析52.1.3 Android的API102.1.4 Android平台的优势112.2 Java Swing112.3 Socket网络通信12第三章 Android手机无线视频监控的设计与实现143.1界面设计143.1.1手机端界面设计143.1.2 PC服务端界面设计183.2视频数据采集与处理203.2.1视频数据采集过程203.2.2 YUV和RGB简介223.2.3 Android SurfaceView技术说明223.3无线视频传输实现233.3.1无线视频传输方式的选择233.3.2网络通信模块实现253.4 PC端视频播放模块设计273.5课题结果展示30总结与展望34参考文献与资料35致谢36附录37第一章 绪论1.1课题背景及意义当今的世界已经开始进入飞速发展的信息时代,信息产业已经成为国民经济的主导产业了,通信技术则成为信息产业中发展进步最快,最迅速的行业。与此同时人们对于安全保障的要求也越来越高,基于嵌入式移动终端设备和无线网络的远程视频监控已经成为监控研究领域的热点。传统的视频采集和传输虽然性能稳定,技术成熟,但在实际应用中存在一些不足:(1)视频采集传输设备比较复杂,线路固定,成本及维护费用昂贵。(2)受地域限制等当今通过采取嵌入式技术,不但实现了视频监控系统的体积微小化、安装简单化、配置灵活化、而且降低了成本。由于将视频压缩和网络功能集中到了体积较小的嵌入式设备内,通过网络对视频监控设备进行远程监控,即可获取监控视频。目前,网络视频监控已经不再是企业级客户的应用,视频监控应用将逐渐向平民化方向发展,利用视频监控的数据为大众服务,如数字化矿工系统、交通导航、旅游景点人流及景点查看。网络视频监控系统采用现有的网络系统,由嵌入式的视频服务器和视频终端组成。嵌入式系统凭借其以应用为中心和系统可裁剪等优点在工业领域中有着广泛的应用。Android作为系统式基于Java的嵌入式操作系统,运行在Linux内核的移动终端设备之上,系统小巧而且拥有全特征。本课题提出一种基于Android平台的无线局域网络视频监控系统方案,不仅为人们的生活带来极大的便利,而且具有良好的发展前景。1.2国内外发展现状和趋势在国内外市场上,主要推出的是数字控制的模拟视频监控和数字视频监控两类产品。前者技术发展已经非常成熟、性能稳定,并在实际工程应用中得到广泛应用,特别是在大、中型视频监控工程中的应用尤为广泛;后者是新近崛起的以计算机技术及图像视频压缩为核心的新型视频监控系统,该系统解决了模拟系统部分弊端而迅速崛起,但仍需进一步完善和发展。目前,视频监控系统正处在数控模拟系统与数字系统混合应用并将逐渐向数字系统过渡的阶段。(1)模拟视频监控系统,也可以称为第一代视频监控系统,出现于20世纪90年代初期,主要由摄像机、视频矩阵、监视器、录像机等组成。该监控系统以模拟方式采用同轴电缆进行传输,传输距离不能太远,而且信号质量不高,主要用于扩展能力有限的小范围内监控系统,一般只能在控制中心进行查看,并且系统的成本高。(2)20世纪90年代中期,随着视频压缩编码技术的不断发展产生了基于PC 机的第二代视频监控系统。在远端视频监控现场,通过若干个摄像头、各种检测、报警探头以及数据处理设备,首先将摄像头采集到的模拟视频信号转化成数字信号,再利用专用压缩卡对数字信号进行压缩处理,通过各自的数据传输通道,与多媒体监控终端PC 机连接,监控终端的PC 机对视频数据进行解压后,就能够显示远端的图像。基于PC 的视频监控系统与传统的模拟视频监控系统相比,具有图像质量高、应用灵活性好、传输距离远、数据的保存成本低等特点,并且数字化的视频数据可以通过各种方式被连接在网络计算机上共享。因此,基于PC 的视频监控系统自出现后被广泛应用,但是该系统也存在很多不足,稳定性较差、结构相对复杂、体积较大、可扩展性差。(3)到了20 世纪90 年代末特别是近几年来,由于网络带宽、计算机处理能力和存储内存等的迅速提高,以及各种实时视频信息处理技术的出现,加速了第三代视频监控系统,即基于嵌入式技术的网络视频监控系统的出现。基于嵌入式技术的网络视频监控系统将嵌入式技术引入到视频技术中,可以很好地解决基于PC 的视频监控系统中存在的问题。基于嵌入式技术的网络视频监控系统的主要工作原理是:采用嵌入式实时操作系统,将摄像机传送来的视频信号数字化后由高效压缩芯片压缩,通过内部总线传送到内置的服务器。与基于PC的视频监控系统相比基于嵌入式技术的视频监控系统具有体积小,安装方便,备置灵活,成本低,稳定性高等特点。视频监控系统的发展方向随着视频监控系统的逐渐发展,监控前端一体化、视频数字化、监控网络化、系统集成化成为视频监控系统公认的发展方向,而数字化是网络化的前提,网络化则又是系统集成化的基础,所以,视频监控系统发展的最大两个特点就是数字化和网络化。(1)监控系统数字化监控系统数字化是21 世纪的显著特征,是以信息技术为核心的电子技术发展的必然。视频监控系统的数字化是将系统中信息流(包括视频、音频、控制等)从模拟状态转为数字状态,从根本上改变视频监控系统信息采集、数据处理、传输、系统控制等方式和结构形式。信息流的数字化、编码压缩、协议的开放化,使视频监控系统与安防系统中其它各子系统间实现无缝连接,并在统一的操作平台上实现管理和控制,这也是系统集成化的含义。(2)监控系统网络化视频监控系统的网络化意味着系统的结构将由集总式向集散式系统过渡。集散式系统采用多层分级的结构形式,具有微内核技术的实时多任务、多用户、分布式操作系统以实现抢先任务调度算法的快速响应。组成集散式监控系统的硬件和软件采用标准化、模块化和系列化的设计,系统设备的配置具有通用性强、开放性好、系统组态灵活、控制功能完善、数据处理方便、人机界面友好以及系统安装、调试和维修简单,系统运行互为热备份,容错可靠等优点。系统的网络化打破了布控区域和设备扩展的地域和数量界限。系统网络化将使整个网络系统硬件和软件资源的共享以及任务和负载的共享变为可能,这也是系统集成的一个重要概念。1.3本文的设计思路本文实现的是基于Android开发平台的视频监控系统的设计与研究,该监控系统集中运用了数据存储技术、嵌入式技术、图像编码技术、网络传输技术,Java编程等诸多方面的知识。在初步了解嵌入式系统理论知识的基础上,对Android操作系统作了较为深入的学习,在电脑上应用Eclipse的ADT插件以及SDK对Android手机客户端进行开发。手机客户端实现使用Android手机摄像头进行图像数据的获取,经过压缩,利用socket通信把数据实时的发送到电脑服务端进行实时播放。PC服务端通过向JFrame添加Jpanel组件,通过Jpanel组件来实现图片的动态显示,达到监控的目的。第二章 Android手机无线视频监控相关技术介绍2.1 Android手机开发平台2.1.1 Android手机开发平台基本介绍Android开发平台是一个开源而且免费的手机平台,一个Linux内核、多操作、多线程的OS。Android不是一个驱动或者产品,开发者能够自定义DVR、GPS、MP3player等应用程序。下面介绍一下Android平台的技术架构。 Android平台技术架构Android平台采取了软件叠层的架构,由低到高一共分为四部分:Linux内核层,中间层,应用程序框架,应用层,如图2.1所示。 图2.1 Android平台架构aLinux内核层:该层是比较基础,包括各种驱动,并提供操作系统的内存管理、进程(Process)管理、执行线程(Thread)管理等基本功能。b中间层:包含程序库和Android运行时环境。c应用程序框架:该层是编写核心应用所使用的API框架,开发者可以使用这些框架来开发自己的应用,但必须遵守该框架的开发原则。d应用层:依据User的期望而将AF的组件及Library组件组合而成的高级服务。该层是各种应用软件,包括通话、短信、日历、地图、浏览器等核心应用程序,这些应用程序都是使用Java编写的。 Android架构分析Android核心为嵌入式Linux2.6作业系统,向上搭配Google为Android开发的类库及Android运行时。在开发应用程序时,应用程序架构内已经具备多种不同的基础组件,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。Android系统内核采用Linux2.6以上版本,是硬件和软件之间的抽象层,主要用于保障进程管理、安全性、内存管理和驱动模型等。Android对操作系统的使用包括核心和驱动两部分,驱动包括一些与移动设备相关的驱动程序,如显示驱动,Flash内存驱动,相机驱动,音频驱动,视频驱动,WiFi驱动,键盘驱动,蓝牙驱动,电源管理等。应用程序框架:开发者可以访问Android应用程序框架中的API,该应用程序架构简化了组件的重用,任何一个应用程序都可以发布它的功能块,并且任何其他的应用程序都可以使用这些发布的功能块。同样,该应用程序的重用体制也使用户可以方便的替换程序组件。Android提供一系列的服务和管理器,其中包括以下内容。a一套强大和可扩展的视图系统:用来建构一个应用程序的基本组件,包括列表、网格。b内容提供器:使得应用文本框、按钮、web浏览器等,这些视图可以用来构建应用程序。程序可以访问另一个应用程序的数据,或者可以共享他们自己的数据;c资源管理器:提供非代码资源的访问,例如本地字符串、图形和布局文件等;d通知管理器:使得应用程序可以在状态栏中显示自定义的提示信息;e活动管理器:用来管理应用程序的生命周期,并且提供常用的导航回退功能。例如:启动应用程序要用到的资源准备及关闭应用程序时释放内存及相关资源等工作。f视窗管理器:用来管理所有启动程序的视窗。g位置管理器:用来管理地图服务的相关功能。h电话管理器:用来管理用户拨打与接听电话的相关功能。i包管理器:管理所有安装在Android系统内的包。Android程序库:Android包含一个能被Android系统中各种不同组件所使用的CC+库,该库通过Android应用程序框架为开发者提供服务,主要包括以下内容。 a系统C库:一个从BSD继承的标准C系统函数库,是专门基于嵌入式Linux设备定制的;b媒体库:该库支持多种常用的音频、视频格式文件的回放和录制,同时支持静态图像文件,编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG等; cSurface Manager:管理显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合; dSGL:底层的2D图形引擎; e3D库:该库可以使用3D硬件加速或者使用高度优化的3D软加速; fFree Type:用于位图和矢量字体显示; gWeb Kit:Android内建的浏览器,是以Web Kit的浏览引擎为基础所开发成的。Wed Kit是一个开源浏览器网页排版引擎,配合Android手机的功能,可以在浏览网页时,达到更好的效果,例如:局部性的缩放网页上的资讯、触控式的操作等效果。 hSQLite库:SQLite是一个用于本地存储的、轻型关系型数据库引擎。SQLite提供结构化的数据存取。目前已经在很多嵌入式产品中使用了它,它占用的资源非常低。它无需安装和管理配置,同时它还支持事务功能和并发处理等等。SQLite也是一套开放性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。 iSSL:中文名为“安全套接层协议层”,它是网景公司提出的基于WEB应用的安全协议。SSL协议指定了一种在应用程序协议(如HTTP、Telenet、NMTP和FTP等)和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP协议与各种应用层协议之间,为数据通讯提供安全支持。 SSL协议可分为两层:SSL记录协议:它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议:它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。SSL协议提供的服务主要有:a认证用户和服务器,确保数据发送到正确的客户机和服务器;b加密数据以防止数据中途被窃取;c维护数据的完整性,确保数据在传输过程中不被改变。Android运行时的组件:Android运行时环境由一个核心库和Dalvik虚拟机组成。核心库Java编程语言核心库的大多数功能。虽然Android是用Java语言来开发、撰写应用程序,但不使用Java运行时组件来执行Java程序,而是用Android自有的Android Runtime来执行。而Android Runtime有俩个重要的组件,一是Core Libraries-核心函数库,另一个则是Dalvik Virtual Machine-Dalvik虚拟机器。它在保证API方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率更高。每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成在一个设备中可以同时有效地运行多个虚拟系统,它依赖于Linux内核的一些功能,如线程机制和底层内存管理机制等。所有的类有Java编译器编译,最后由Dalvik虚拟机执行。2.1.2 Android应用程序构成分析Activity简介Activity是四个Android构造块中最基本的组件。一个Activity通常是一个单独的屏幕。每一个Activity作为一个独立的类来实现,均继承自Activity基类。您的Activity类将显示一个由若干Views控件组成的用户界面并对事件做出响应。大多数应用程序包含多个屏幕。举例来说,一个文本消息应用程序也许会有一个屏幕,用来显示联系人列表,第二个屏幕用来编辑短消息,还有用来浏览历史消息或者用来更改设置的屏幕。每一个这样的屏幕都将作为一个Activity。切换屏幕是通过打开一个新的Activity来实现的。在一些实例中,一个Activity会将返回值返回给前一个Activity,比如,一个允许用户选择图片的Activity将返回选中的图片到调用方。在Activity类中将使用setContentView()方法来显示由视图控件组成的用户界面,并对通过这些视图控件所触发的事件做出相应Android会把每个从主菜单打来的程序保留在堆栈中。当打开一个新屏幕时,之前的屏幕会被置为暂停状态并且压入历史堆栈中;在包含多个Activity类的情况下,这些Activity可以通过一个Activity栈来进行管理,当一个新的Activity启动的时候,它首先被放置在Activity栈顶并成为运行状态的Activity,之前正在运行的Activity也在栈中,将被保存在新的Activity后边,只有当这个Activity推出以后,之前的Activity才能重回到前台界面。Activity生命周期Activity具有生命周期,由Android框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序,都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。Activity生命周期的几个过程:如图2.2所示启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。 图2.2 Activity生命周期 Intent Receive使用Intent Receiver可以使自己的应用程序响应外部事件,比如数据网络可用,晚上时,电话呼入。Intent Receiver 可以使用NotificationManager来提醒用户一些他们可能感兴趣的消息,但并不显示用户界面。Intent Receiver在Androidmanifest.xml中完成注册,也可以通过Context.registerReceiver()在自己的代码中完成注册。系统会在您需要的时候启动你的应用程序,Intent Receiver 被触发时,自己的应用程序不必调用Intent Receiver。也可以通过将自身的intent广播给其他的应用程序。ServerServer组件分为本地和远程两种类型,其中远程的Server是Android平台基础,、如Android框架中的定位服务、音频服务、电话服务等都是通过远程Server实现的。Service是Android中另一个很重要的组件,它与broadcast Receiver都被称为非UI后台组件。Service不是用于与用户交互的组件,常见的例子如:音频播放器程序,再转到后台播放的时候它仍然能够保持歌曲播放;又如文件下载程序,他可以在后台执行文件的下载。本地Server是一种进程内的通信,与调用组件在一个应用中;远程Server,一般用于进程间通信,与调用组件不在一个应用中。与其他组件一样,Service也是运行在主线程中的。这意味着,如果Service要进行消耗CPU或者阻塞的操作,它意味着应该产生新的线程,在新的线程中进行这些工作。每个Service都必须在AndroidManifest.xml()和Context.bingService()在其他组件中启动。两种Service各自有不同的生命周期,但都继承了一个类:Android.app.Service类。Service的生命周期:本地Service要通过Context.startService()方法启动,Android会根据intent查找这个Service。然后调用它的onCreate()方法,然后调用它的onStart(intent ,int)方法,客户端数据可以通过onStart方法发的intent参数传递给Service。Service开始运行直到客户端调用Context.stopService()或者Service调用stopSelf()方法,Service销毁的时候会调用onDestory(),可以再这个方法中释放一些资源。远程Service生命周期,在客户端组件中通过Context.bindService()方法启动远程Service,Android会根据intent查找这个Service比建立连接。接着就会调用它的onCreate()方法,然后在调用它的onBind(Intent intent)方法重新绑定这个Service。客户端调用unbindService(Service Connection)方法结束与Service的绑定,Service销毁的时候调用onDestroy(),可以再这个方法中释放一些资源。见图2.3所示:图2.3 Server远程和近程服务 Content ProviderAndroid系统是基于Linux的,对于文件的访问权限控制很严格,不同的用户启动不同的应用,不同的应用之间的访问就是不同用户之间的访问。由于权限的限制,不同应用之间无法互相访问数据,访问模型如图2.4所示。Android平台提供了一种共享数据技术Content Provider ,Content Provider能够实现不同应用之间的数据共享,使用Content Provider 访问如图2.5所示。Content Provide除了能够实现数据共享外,还可以提供一定程度上的数据抽象,并提供一个访问接口,使上层调用者不用关心下层数据存储的实现环节。这与DAO接口很相似,Content Provide屏蔽了数据存储细节。Android系统提供了很多Content Provider,这些Content Provider包括多媒体音频文件、视频文件、联系人、短信访问、图片、电话记录。除了这些Android内置的Content Provider 以外,我们自己也可以定义Content Provider。图2.4不同用户之间的访问图2.5使用Content Provider访问2.1.3 Android的APIAndroid API主要又以下几个部分组成:AndroidManifest.xml Android系统开放了很多底层应用提供用户调用,与其他系统不同,Android系统具有自己特殊的调用底层的方式。因此,它需要通过某种方式设置Activity许可才可以运行相应的应用。AndroidManifest.xml是系统控制文件,它通知系统该如何处理所创建的所有的应用组件。在AndroidManifest.xml中它可以配置应用程序的权限,这种方式提供了程序使用系统应用的安全性的保证,底层应用只有用相应的权限允许才可能被用户程序使用,不然程序运行出现错误。 Android系统提供了很多许可,用户使用相应的底层服务的时候,需要在AndroidManifest.xml中添加相应的权限就可。如允许程序打电话,允许程序获取网络状态信息等等。活动 活动是最基本的Android应用程序组件。在应用程序之中,一个活动通常就是一个独立的屏幕。每个活动都通过继承活动的基类而被实现成为一个独立的活动类,活动类就会显示由视图控件组成的用户接口,然后对事件作出响应。 大部分的应用程序都是由多个屏幕显示组成的,这里的每个屏幕都将是一个活动,很容易实现从一个屏幕到另一个屏幕然后完成新的活动。Android会把每个从主菜单打开的程序保留在堆栈之中,用户就可以通过回退操作退回到之前打开过的屏幕,也能够选择性地移去一些没有必要保留的屏幕。视图 视图它可以将其自身绘制到屏幕之上。Android的用户界面由一系列的视图树构成,接口全部由一组以树的形式出现的视图组成的。开发者能够通过创建一个新的视图的方法来运用自定义的图形处理技术。Intent Intent是用来描述应用程序的功能的。它利用消息实现应用程序间的交互机制,就能够在程序运行的过程中连接两个不同的组件了。Intent描述了应用中一次操作的动作、数据和附加数据,向Android系统表达某种请求或者意愿,Android系统就会根据Intent描述的内容选择适当的组件来发起响应,并将Intent传递给这个组件,完成组件的调用。 与Intent相关的有两个类IntentFilter与IntentReceiver。当Intent请求做任意一个动作时,IntentFilter用于描绘一个活动或者广播接收器能够操作哪些Intent,而IntentReceiver可以使应用程序对外部事件做出相应。Intent之中两个最重要的部分为动作和动作对应的数据。典型的动作类型包括活动的查看、选取、编辑等,而动作对应的数据而是以URI形式表示。服务服务为Android应用程序中有较长的生命周期但是它没有用户界面的程序。它运行在后台,而且可以与其他程序进行交互。服务与活动的级别相似,但是它不能独立运行,而需要通过某一个活动来调用。 Android应用程序的生命周期是由Android系统来决定的,不是由具体的应用程序的线程来控制。如果应用程序要求在没有界面显示的情况还能正常运行,此时就需要用到Service了。通知 通知将以小图标的形式展现在状态栏里的,用户可以通过与图标的交互来接收消息。最常见的通知有短信息、通话记录和语音邮件,然而应用程序也可以创建它们自己的通知事件。内容提供者 Android应用程序可以运用文件或者SQLite数据库来存储数据,内容提供者提供了一个多应用之间数据共享的方式。当某个应用程序的数据需要和其他应用程序共享时,内容提供器就会发挥它作用。一个Content Provider类,实现一组标准的方法,它能够让其他的应用储存或者读取此内容提供器处理的各种各样数据类型,即一个应用程序能够通过实现一个Content Provider的抽象接口把自己的数据暴露出去。外界根本不能看,也不用看到该应用程序暴露的数据是如何储存的,外界可以通过这一套标准和统一的接口读取应用程序的数据,它也可以删除应用程序的数据。2.1.4 Android平台的优势Android与其他手机操作系统相比,Android 具有以下四大优点:开放性Android 与其它操作系统相比最大的特点在于其开放性。开放性包括两方面:其一,Android 以开源Linux 内核为基础,源代码开放、应用开发人才资源丰富其二,Android 对第三方软件开发的开放,极大的促进该系统第三方软件的开发。可移植性Android 系统具有良好的源代码可移植性和兼容性。Android 应用程序框架完全使用Java 编程语言,不仅编程简单且而可以实现跨平台运行。应用程序间平等且无界限系统的核心应用和第三方应用都是完全平等的开发人员可以把Web 上的数据与本地结合起来,应用程序也可以通过声明供其他应用程序使用。无缝结合的Google 应用Google 为Android 应用开发提供具有高效、简洁、节省资源的运行环境Dalvik虚拟机;完美免费的开放软件Google maps 也深受人们青睐,同时Google 服务还包括浏览器、邮件、语音等。2.2 Java SwingSwing采用了一种MVC的设计范式,即模型-视图-控制(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。此部分用来设计PC监控端的视频播放部分。 Swing外观感觉采用可插入的外观感觉。下图2.6为Swing组件类的层次图2.6 Swing组件类的层次Swing有俩种添加组件的方法: 第一种是用getContentPane()方法获得JFrame的内容面板,在这个内容面板上添加组件。第二种是创建一个中间容器,在这个容器中添加组件,再用setContentPane()方法把这个容器置为JFrame的内容面板。2.3 Socket网络通信Socket(套接字)是一种通信机制,可以实现单机或者在不同网络进行通信,它创建需要明确的区分C(客户端)/S(服务器端),并支持多个客户端连接到同一个服务器。有两种传输模式:(1)面向连接的传输:基于TCP协议,可靠性高,但效率低;(2)面向无连接的传输:基于UDP协议,可靠性低,但效率高;Android中,直接采用Socket通信应该是我们遇到的最低级的网络运用。尽管已经作了很大程度的抽象,但是纯粹的Socket通信,仍然给开发者留下很多细节需要处理,尤其在服务器端,开发者需要处理多线程以及数据缓冲等的设计问题。下图2.7为Socket通信流程图图2.7 Socket通信流程图第三章 Android手机无线视频监控的设计与实现3.1界面设计根据应用程序需要,应该有两部分界面设计一是PC端二是手机端,它们分别实现图像的获取和图像动画的播放。界面设计的目的要达到良好的用户体验,界面要干净而不过于简单、关注内容而非修饰、一致,吸引人,少量简介的变化、使用云端服务来加强用户体验。界面设计也是Android开发的一项重要工作,是一个应用程序是否能被大多数人接受的一个重要指标。使用户不知道内部构造也能够熟练的操作并使用这个产品。3.1.1手机端界面设计Android手机负责图像的采集、处理、传输,Android手机界面由两部分组成,一是登陆界面,包括服务端PC的IP地址输入、用户名输入、密码输入该部分,首先设置全屏:requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);然后使用一个自定义布局的AlertDialog(对话框),用getLayoutinflate.inflate方法的到我们要显示的R.layout.login的XML文件,再用builder.setView方法将取出的XML文件装载进对话框中。然后设计了登陆出错次数的限制,当一次密码或者用户名不正确的时候会提示输入不正确请重新输入,刚开始每次点击登陆后对话框就会消失,不能再次输入,查找资料知道用下面的程序就可以实现对话框不消失:tryField field = dialog.getClass().getSuperclass().getDeclaredField(“mShowing”);field.setAccessible(true);field.set(dialog,false);catch(Exception e)e.printStackTrace();当输入错误次数超过四次以后对话框才会消失用下面的程序:try Field field = dialog.getClass().getSuperclass().getDeclaredField(mShowing);field.setAccessible(true); field.set(dialog, true); catch (Exception e) e.printStackTrace();当输入用户名密码都正确的时候,点击登陆会出现是否记住密码的选项。记住密码是一个业务方法我们在工程里面新建一个包loginService,再创建一个工程 Service 在里面定义一个保存文件方法:public static boolean SaveInfoServer( Context context,String IP,String username,String password)try /getFilesDir() .帮我们找到安装目录/data/data/包名File fs1 = new File(context.getFilesDir(),info.txt);FileOutputStream fos = new FileOutputStream(fs1);/各项数据以# 分割fos.write(IP+#+username+#+password).getBytes();fos.close();return true; catch (Exception e) e.printStackTrace();return false;来保存文件到手机上,Android下每个应用程序都有自己特定的文件夹来保存自己的信息,所以我们可以运用context(上下文)的getFilesDir()来得到文件的存储文件夹然后在下次登陆的时候应用程序就会把文件读到登陆界面我们就可以直接登陆了,当然我们也可以修改保存信息这也定义了一个函数:public static Map getSaveInfoServer(Context context)File file = new File(context.getFilesDir(),info.txt);try FileInputStream fis = new FileInputStream(file);SuppressWarnings(resource)BufferedReader br = new BufferedReader(new InputStreamReader(fis);String str = br.readLine();String infos = str.split(#);Map map = new HashMap();/一一得到数据map.put(IP,infos0);map.put(username, infos1);map.put(password, infos2);return map; catch (Exception e) e.printStackTrace();return null;为了更加完善用户体验,我们又增加了一个public static boolean checkInfoServer(Context context,String ipname,String pUsername,String Password)File file = new File(context.getFilesDir(),info.txt);try FileInputStream fis = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(fis);String str = br.readLine();String infos = str.split(#);String ip = infos0;String name = infos1;String password = infos2;br.close();if(ip.equalsIgnoreCase(ipname)&name.equalsIgnoreCase(pUsername)&password.equalsIgnoreCase(Password)return true;elsereturn false; catch (Exception e) e.printStackTrace();return false;来得到输入框的信息,然后与文件中存的数据进行比较,如何数据没有任何变化,我们在点击登陆后将不弹出是否保存用户信息的对话框此部分运用了如何操作Android手机内存的方法。要实现以上操作,必须开启Android手机内存读取权限:登陆以后就会进入另一个Activity,用一个SurficeView来得到监控的预览,和图像数据。在另一个Activity里面我们设置了一个按钮开始监控按钮,此按钮响应一个点击事件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论