版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 武汉理工大学毕业设计(论文)基于轨迹识别的安卓屏保程序设计基于轨迹识别的安卓屏保程序设计学院(系): 信息工程学院 专业班级: 信息工程 1001 班 学生姓名: 邓托 指导教师: 汪阳 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。作者签名: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅
2、和借阅。本人授权省级优秀学士论文评选机构将本学位论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于 1、保密囗,在 年解密后适用本授权书2、不保密囗 。(请在以上相应方框内打“”)作者签名: 年 月 日导师签名: 年 月 日i摘 要 随着计算机的广泛运用,手机市场的迅速发展,各种隐私保护方式也在网上广为流传,已经渐渐成为人们生活中必不可少的一部分。各种解锁软件也紧跟着发展起来。开发一种占用手机资源少,界面简单,人性化操作,保密功能强的解锁软件具有重要的现实意义。基于轨迹识别的九宫格安卓屏幕保护软件是在eclipse 开发平台的基础上
3、,运用java 语言进行设计的。首先在屏幕保护界面上创建分布匀称的九个点,每个点包含若干像素。用若干个顺序连接的点来记录用户设置的手势轨迹密码,只有当用户手势轨迹所经过的若干个点的图像和走势与设置的密码完全一致时才能解锁,用户才能获得进一步操作的权限;否则,用户只能停留在解锁界面 ,无法进行其他操作。通过多次在不同安卓手机上进行程序测试,九宫格解锁屏保软件具有良好的用户体验度。不仅操作简便,而且密码设计的多样性为用户提供了强大的密保功能。关键词:轨迹识别;屏幕保护;九宫格解锁 iiabstractwith the widespread use of computers and the rapi
4、d development of mobile phone markets, a variety of privacy protection methods are widely circulated online, gradually becoming an indispensable part of usual life. various unlocking software are also developed following the tendency. so developing a kind of unlocking software that occupies less pho
5、ne resources has a simple interface, user-friendly operation and powerful security function is practically significant.based on trajectory recognition, android squared screen saver software is developed by java language on the platform of eclipse. firstly, creating nine points symmetrically distribu
6、ted on the screen saver interface, which point contains several pixels. the users gesture password is set by several sequentially connected points to record the track. only when the picture and trend of gesture trajectory which through a number of identical points is completely similar with the set
7、password, the user can obtain the permission for further operation; otherwise the user just stay at the unlock screen and cannot perform other operations. tested on different android phones, squared unlock screensaver software provides good user experience. besides simple operation, it also provides
8、 users with a powerful security protection function through the diversity of cipher design.key words: trajectory recognition; screen saver; squared unlock目 录第 1 章 绪论.11.1 研究目的及意义.11.2 国内外研究现状.1第 2 章 基于轨迹识别的屏保程序设计.42.1 浅论九宫格轨迹识别算法.42.2 用户功能需求分析.52.3 系统总体设计.72.4 输入模块详细设计.92.5 密码存储模块详细设计.122.6 轨迹密码比对模块
9、详细设计.132.7 轨迹显示模块详细设计.14第 3 章 基于轨迹识别的安卓屏保程序实现.163.1 android应用的构成和工作机制介绍.163.2. 九宫格视图模块实现.173.3 输入模块实现.183.4 显示模块实现.183.5 密码存储模块实现.193.6 密码比对模块实现.203.7 程序界面设计.203.8 配置 androidmanifest.xml.22第 4 章 总结和展望.23参考文献.24致 谢.25武汉理工大学毕业设计(论文)1第 1 章 绪论1.1 研究目的及意义安卓系统是谷歌于2007年公布的开放式源代码手机系统,它的开放性优于其它封闭式的手机系统,是真正意义
10、上的开放性移动设备平台,任何人都可以根据自己的喜好将手机系统中的所有功能重新编写。安卓系统由于其开放性,也会随之产生一系列安全和隐私问题。于是各种解锁软件也紧跟着发展起来,但是很多屏幕保护软件盲目追求界面美观、功能庞大,对用户的手机造成了很多资源浪费,如内存占用率过高、解锁手续复杂等,给用户带来了许多不便。对于大多数普通用户,许多额外功能形同虚设,在日常操作中几乎不会用到。想要综合解决这个问题,可在手机上安装安全软件或仅仅具有识别作用的屏幕保护程序。现在的屏幕保护程序多种多样,大部分只是单纯地为了防止误操作。而基于轨迹识别的屏保程序则增添了一项新的隐私保护功能。通过采集手指在屏幕上的轨迹,可自
11、行设计独特的图案,在其他人不知其图案的前提下,可防止他人解锁手机,保护用户个人隐私。九宫格图案解锁程序是基于轨迹识别的屏保程序中占用手机资源少、界面最简洁的密保软件。研究目的在于通过设计基于轨迹识别的九宫格解锁程序,并将其应用在开放式的安卓系统中,通过简洁方便、占用手机资源少、人性化的解锁操作,达到保护用户个人隐私的目的。 轨迹识别是将在手写设备上书写时产生的有序轨迹信息化转化为字符串密码的过程,实际上是手写轨迹的坐标序列到字符串密码的一个映射过程,是人机交互最自然、最方便的手段之一。基于轨迹识别的屏保程序,利用了轨迹识别解锁的原理,给手机隐私安装上了一扇防盗门,只有轨迹匹配时,用户才能通过该
12、保护程序的验证,获得继续操作手机的权限。九宫格解锁软件在程序界面上创建了能记录用户轨迹的九个点分布匀称。用户使用手机时,打开程序的第一界面就是一个大大的九宫格。只有用户输入与原先设置的初始轨迹一样的手势轨迹才能离开此界面,做进一步操作 。1.2 国内外研究现状1.2.1 国外研究现状 手势识别技术在国外很早开始研究,最早的相关技术是基于数据手套的,它是由grimes 于 1983 年在贝尔实验室完成的,6 年后,数据手套技术更进一步,sturam 能通过手指各种特征的检测实现对虚拟物体的控制。20 世纪 90 年代,随着计算机技术的快速发武汉理工大学毕业设计(论文)2展,手势识别技术也突飞猛进
13、,90 年代初,富士通在实验室中己经可以识别 46 种手部的形态,接着 m. shah 等人通过数据手套输入 7 种不同手势,能够让系统做出 7 种不同的控制动作。随后两年,starne:应用该技术准确的识别了美国式手语中由 40 个单词任意匹配形成的短句;同样 mohammed 等人也使用该技术能比较准确的识别由 95 个单词任意匹配的句子队而台大的 liang 运用此技术比较准确的识别了台湾地区 gesture boob 中 250 个基础单词;同时,xu 等人成功将手势识别技术应用于机器人中实现了智能控制;1997 年,k.grobel 等人将图像处理技术应用到手势识别中,把视频图像作为
14、输入而非数据手套,能够比较准确的识别视频图像中的 262 个单词,为手势识别技术的实现方法上提供了新的参考;1999 年,v ogler 等人结合上述两种手势识别技术,比较准确的识别了美国式手语中的 53 个单词。 进入 21 世纪,手势识别技术的研究已经有了很多突破,而且已经广泛应用在各个行业,并有一些基于手势识别的产品出现。国际上已经成功研究了多种模式的人机交互系统。如索尼公司在 2003 夏天推出了一个叫做 eyetoy 的游戏外设,它能用摄像头捕捉用户影像信息,并对用户动作进行手势识别,从而达到游戏的互动控制。几个月后,一家在美国 michigan 州的科技公司推出一个能用于天气预报的
15、手势软件,天气播报员在播报天气时如果想要呈现出生动的天气效果,可通过改变手指动作向该系统传达特定指令。2005 年,三星公司发布了一款名为 esgh-e758 且包含手势识别技术的手机,它内置动作感应器,如果想要打电话、玩游戏、拍照,可以晃动手势就能完成而无需按键。类似这款手机,nokia 也推出了具有相似功能的 e77,用户只需定义相关手势动作,就可以通过手势完成特定的功能。2009 年 mit 研发出一款新型液晶传感器可控制电视实现基本操作,它无需遥控器,也无需触摸屏幕,只需要通过手势来遥控电视机进行改变音量与换台。 1.2.2 国内研究现状我国手势识别技术起步稍晚,也是从数据手套技术开始
16、的,1995 年高文教授提出计算机智能接口的框架;4 年后,吴江琴等人将人工神经网络与隐马尔科夫模型相结合的方法用于数据手套技术中,能够比较准确的识别中文手语中单词和句子.一年后,马继涌等人也在数据手套技术的基础上,结合动态高斯混合模型,能够准确识别中文手语中的 274个单词。2000 年,任海滨提出了基于 dtw 的手势识别算法,该方法能准确的识别 12 种手势,2 年后,他运用图像处理技术通过对运动模型的分析,提出一种动态图像分割的手势识别方法。最近中科院计研所利用数据手套技术并针对手语动作建立运动模型,在经过多年的努力后,获得了比较不错的手语数据库。2011 年 4 月,腾讯公司将手势识
17、别技术应用于幻灯片的放映,推出了 qq 手势达人 for ppt 的应用插件(仅支持 office2007 ),如图 1-4,该软件是一款通过普通摄像头来进行手势控制的体感软件,它抛弃键盘和鼠标,武汉理工大学毕业设计(论文)3完全由手势控制 ppt 的演示,且简单易学,三步操作手势(手掌、变拳、移动),就可以提供 ppt 启动播放,上翻页、下翻页、结束播放等四个常用手势命令。吴江琴、高文在仔细研究 ann-hmm 混合方法后,成功的开发出了具有 18 个传感器的 cyber-glover 型号数据手套的中国手语识别系统。而在计算机单目视觉下的动态手势识别方面,2000 年,清华大学的祝远新、徐
18、光裕等对有关连续动态手势的识别进行了研究,他们通过融合手势的皮肤颜色信息和运动信息,成功对复杂背景下的动态手势进行了分割。2008 年 9 月,中国科学院计算技术研究所手语识别与合成课题组历时 8 年,开发出了先进的手语识别与合成技术,该技术基于运动跟踪原理,使用 2 只数据手套以及 3 个六自由度位置的跟踪器,通过记录下每个手语词在真实人体演示时的运动数据,从而建立手语词初始的运动数据库。在成功建立手语词运动数据库之后,再对数据库里的手语词的运动数据进行编辑和微调,最后就得到了高质量的手语词的运动数据库。武汉理工大学毕业设计(论文)4第 2 章 基于轨迹识别的屏保程序设计2.1 浅论九宫格轨
19、迹识别算法2.1.1 算法原理在屏幕固定位置设置九个大小一致的圆圈。用户的手势轨迹每经过一个圆圈,就将该圆圈的圆心位置记录下来,不经过圆圈则不记录,若经过的圆圈是上一个已经记录了圆心位置的的圆圈也不记录。手势轨迹一般是连续的经过一个圆圈的,不连续记录相同的圆心是为了去重。将记录的所有圆心位置保存为一个字符串。该字符串就是轨迹识别码。九宫格轨迹识别通过比较轨迹识别码是否一样来判断两条轨迹是否相同。2.1.2 算法精度分析通过该算法得到的一个轨迹识别码可以表示无数种可能性的轨迹。但是一条轨迹只有一个轨迹识别码。这里将轨迹近似化,标准化了。如图 2.1 所示,三个不同的手势轨迹对应同一个轨迹码(0,
20、3,6,7) 。图 2.1 轨迹图很显然,九宫格轨迹识别算法轨迹识别算法误差非常之大。该算法将一个平面圆近似化成了一个点。提高九宫格轨迹识别算法准确率的方法有两种。第一种方法:增加屏幕上固定圆圈的数量。用极值法思想考虑,当屏幕上的固定圆圈数量与屏幕像素一样多的时候(此时圆圈半径为 0) ,该算法误差就为 0 了。第二种方法:尽量把九个圆圈均匀的固定在屏幕上。这种方法的理论基础来源于人的书写习惯,人们总是倾向于将文字书写得匀称,这样书写会更美观。人们在使用手机时,也会有这种习惯。所以均匀分布九个圆圈能记录更多的圆心位置。武汉理工大学毕业设计(论文)52.1.3 选取算法参数设计九宫格自定义视图用
21、提高九宫格轨迹识别算法准确率的用提高九宫格轨迹识别算法准确率的第一种算法看似能完美实现轨迹 0 误差识别。但是实际中是不可能的。当屏幕中的圆圈数量太多的时候,安卓手机系统无法承载如此多的存储与计算负荷。而且记录的轨迹识别码是用户需要记住的,轨迹识别码太长,一旦用户无法记住,用户会面临自己都无法解锁的尴尬局面。该屏保程序设计中,我们使用第二种方法来提高轨迹识别的正确率。事实经验得出结论,九个圆圈的基于轨迹识别的屏幕保护程序是最受人们欢迎的。如图 2.2 所示,设计一个宽度占满整个屏幕区域的正方形九宫格。图 2.2 九宫格视图下面通过计算来得到视图定义的相关参数:(1) 取得屏幕的宽 w,高 h;
22、r(2) 得到圆圈 r=w/3/2;得到中心圆圈的圆心位置 o4(w/2,h/2);(3) 设置 x= w/2 ;y=h/2;(4) 得到到所有圆圈圆心数据 o0(x-r,y-r), o1(x,y-r), o2(x+r,y-r), o3(x-r,y) , o5(x+r,y) , o6(x-r,y+r) , o7(x,y+r) , o8(x+r,y+r) 。2.2 用户功能需求分析一般基于轨迹识别的安卓屏幕保护程序设计的目的就是一个,那就是为了让用户的手机不能被其他人使用。而用户自身有一个设置密码的方式,用户自身设置的密码要能被系统永久保存,以便用户验证密码是比对两次设置的密码是否相同。所以安卓
23、屏幕保护程序设计的基本功能有三个,即设置轨迹密码功能,解锁功能,修改轨迹密码功能。本次基于轨迹识别的安卓屏幕保护程序设计的开发工作是一项研究性的工作,所以设计本程序也只需要实现用户的设置轨迹密码功能,解锁功能和修改轨迹密码功能。总用例图如图 2.3 所示。武汉理工大学毕业设计(论文)6图 2.3 总用例图解锁的时候,有输入密码功能,有可能轨迹密码输入错误,于是得有重新输入密码功能。解锁用例图如图 2.4 所示。图 2.4 用户解锁用例图在设置轨迹密码时候,有输入轨迹密码功能,有可能用户对已绘制的密码不满意,于是有重新输入轨迹密码功能,设置的密码必须保存起来,所有有保存轨迹密码功能。设置轨迹密码
24、用例图 2.5 所示。图 2.5 绘制轨迹密码用例图在修改轨迹密码的时候,有输入轨迹密码功能,当旧轨迹密码验证不正确,必须重新输入旧轨迹密码,所以有重新输入轨迹密码功能。对设置的新轨迹密码不满意时,也设置密码修改密码解锁绘制密码保存密码重新绘制密码设置密码输入密码重新输入密码解锁武汉理工大学毕业设计(论文)7得重新输入新轨迹密码。修改后的新轨迹密码得保存起来,所以有轨迹密码存储功能。修改轨迹密码用例图如图 2.6 所示。图 2.6 修改密用例图2.3 系统总体设计 通过软件功能分析可知本软件需要实现用户的三个功能。分别为手势密码设置功能,手势密码验证功能,以及修改密码功能。为了完成手势密码设置
25、功能,手势密码验证功能,以及修改密码功能,需要设计三个界面,方便用户操作。它们分别为密码设置界面,登陆验证界面以及主界面。三个界面之间能互相跳转。图 2.7 展示了该屏幕保护设计的系统流程图。输入密码重绘新密码绘制新密码重新输入密码保存密码修改密码武汉理工大学毕业设计(论文)8图 2.7 系统流程图在系统的密码设置界面创建一个按钮“重新绘制” ,点击该按钮,用户就可以从该界面的九宫格视图中重新绘制轨迹图。轨迹图设置好后,点击保存按钮,该轨迹会保存为一个轨迹识别码,该轨迹识别码被存放在静态文件中,用不丢失。系统主界面设置一个按钮“重置密码” 。点击此按钮直接跳转到密码验证界面,轨迹密码验证成功后
26、,程序跳转到密码设置界面。从系统流程图中可以得到各界面之间的跳转关系如图 2.8 所示。结束进入解锁界面开始解锁成功进入解锁界面进入轨迹密码设置界面初始化界面轨迹对比正确?轨迹密码对比正确?重置密码?重置密码或保存密码有无轨迹密码设置输入轨迹密码输入轨迹密码输入轨迹密码重置y 保存yyynnnn武汉理工大学毕业设计(论文)9图 2.8 界面跳转关系图 系统总体设计中的各个模块可以分为轨迹输入模块,轨迹存储模块,以及轨迹对比验证模块。考虑到用户体验效果,本设计添加一个轨迹显示模块,将用户所经过的大致轨迹显示出来。轨迹输入由用户从九宫格视图中输入,用户绘制轨迹时系统将输入的轨迹记录下来。此处记录的
27、是轨迹顺序经过的九宫格圆圈的圆心。再将所有圆心的索引号转化为一个字符串。密码存储模块让系统记住用户先前所设置的九宫格密码,改密码必须被保永久存储起来,方便系统的调用。首先程序捕获到的手势轨迹所经过的点集的索引转化为字符串。然后将该字符串保存到静态文件中。 轨迹显示模块显示手势轨迹所经过的点和线。将即时捕捉到的用户轨迹索引序号保存为动态字符串。将该动态字符串数与用户存储的密码字符串进行比对,若两者一致,则程序解锁。2.4 输入模块详细设计图 2.9 展示的是输入模块的工作流程图。在密码验证界面,用户手指接触屏幕,移动,或提起通过 event.getaction()函数能得到。该输入模块将用户手势
28、轨迹所经的九宫格圆圈的圆心点用 spoints 数组临时保存起来。密码验证界面1密码设置界面密码验证界面2主界面重置密码密码输入错误密码输入正确保存密码输入错误解锁成功武汉理工大学毕业设计(论文)10开始该点是上个记录点?用户点下屏幕结束check函数判断该点是否在九宫格圆圈图片上?check函数判断该点是否在九宫格圆圈图片上?手指移动?手指提起?等待用户输入添加该圆心到spoints()中获取当前坐标(ex,ey)添加该圆心到spoints()中获取当前坐标(ex,ey)yyyyynnnnnn武汉理工大学毕业设计(论文)11图 2.9 输入模块流程图event.getaction()函数能够
29、返回用户接触屏幕时的状态。我们需要用到用户手势的三个状态。其中包括点下,移动和提起。为了实现输入密码的功能。得创建一个点类,这个点类有以下属性 point(x,y,p,index).其中x,y 是这个点在屏幕上的位置 ,创建点时获得;p 为这个点的状态0/1,默认为0;index是这个点的标签,默认为0。创建spoints 数组来存储被选择的point 点类。创建mpoints33数组来依次存储九宫格视图中九个圆圈的中心位置。创建check()函数来判断点是否在九宫格圆圈图片上 ,check 函数的判断过程如流程图 2.10 所示。图 2.10 判断流程判断该点是否是上一记录点 的方法如流程图
30、2.11 所示。调用arraylist.size 方法能或得spoints 数组的大小。调用 arraylist.get 方法能得到 spoints 数组中特定位置的点。所以得到 spoints 数组最后的点的索引值方法为 spoints.get(spoints.size() - 1)。取得当前坐标(ex,ey)i=0;j=0取得mpoints坐标(x,y)(x-ex)2-(y-ey)2r2?该点在圆圏图片上,返回mpointsij结束j2?j=j+1i2?i=i+1;j=0ynynny开始武汉理工大学毕业设计(论文)12图 2.11 是否同一点判断流程调用arraylist 的 add()法
31、可以直接在 spoints 数组后面添加点元素。2.5 密码存储模块详细设计按下密码设置界面的“保存”按钮,系统将 spoints 数组中所有点的 index 转化为字符串。再通过 sharedpreferences 函数将数据存储到静态 xml 文件中。密码存储的简要流程图如图 2.12 所示。开始捕获到点取得该点索引将所有索引存为字符串将字符串存入到xml文件中结束图 2.12 存储模块设计流程中的第二步在输入模块里已经完成。系统捕获到的所有点被存在 spoints 数组中。开始取得spoints数组中最后一点的索引值判断将记录的索引值与该值是否相同添加该点到spoints中结束ny武汉理
32、工大学毕业设计(论文)13该模块中得创建一个 stringbuffer()类型的中间变量 sf,该变量可以存储和操作字符串。定义一个 stringbuffer()类型来完成密码的字符串转化。遍历 spoints 点集,将依次将spoints 中的点的索引存储到字符串 sf 中。接下来的工作就是将该字符串保存到静态文件中了。将 spoints 中的所有点的索引保存为 sf 字符串的流程图2.13所示。开始创建stringbuffer类型变量sffor语句遍历spoints数组调用sf.append()函数添加点索引将索引转化为字符串结束图 2.13 转化为字符串流程图sf 调用 stringbu
33、ffer()的 append 方法能添加数据到 sf 字符串的结尾变成一个新的字符串。使用 shared preferences 保存数据,能将数据存入到 xml 文件中。此处用调用 context对象的 getsharedpreferences()方法。使创建一个 sharedpreferences.editor 对象,调用sharedpreferences.editor 对象的 putstring 函数来实现存储字符串到“password”中。这样索引字符串就以以间值对的形式存储到静态 xml 中。2.6 轨迹密码比对模块详细设计当用户输入完轨迹密码,即用户手指提起,离开屏幕,系统的输入模
34、块将用户轨迹所经过的九宫格圆圈图片的圆心点用 spoints 数组记录起来。调用密码存储模块的字符串转化模块将 spoints 数组记录的所有点的索引转化为字符串。将该字符串与用户存储的密码字符串进行比对,若两者一致,则程序解锁,程序可 进一步操作。若不一致,则解锁失败,用户继续解锁。图2.14 展示了轨迹密码模块工作的流程。武汉理工大学毕业设计(论文)14开始捕获到用户轨迹将轨迹索引保存到动态字符串获取用户已保存的密码两者一致?解锁结束图 2.14 密码比对模块流程流程中的第二步由输入模块完成,第三步可以通过调用密码存储模块的字符串转化模块实现,所以这里无需再进行设计。由于密码存储的时候是通
35、过 shared preferences 完成的,所以获取用户已设置的密码字符串可以通过 get()方法完成。两者的对比由字符串的比较方法equals 完成。当 equals 返回值为 true 时,密码解锁成功,反之,解锁失败。2.7 轨迹显示模块详细设计当用户绘制轨迹时,系统将用户绘制的大致轨迹显示出来。轨迹的显示可以分为两部分,圆圈图片的显示和线的显示。显示圆圈图片时,需要用到圆心点的 state 参数。点的 state 参数设置的默认值为 0,当该点被轨迹经过,即 spoints 数组记录了该点,该点的 state 参数就被设置为 1。这样的话,程序只需判断圆圈圆心点的 state 就
36、能判断该圆圈该画成什么状态。圆圈图片显示判断的流程图如图 2.15 所示。九个圆圈图片都得依图 2.15 来判断。图片的显示可以调用drawbitmap 方法来完成。连线的显示包含两个方面,分别为圆圈图片中心点到圆圈图片中心点的显示和圆圈图片圆心点到普通像素点的显示 圆圈图片中心点到圆圈图片中心点的显示用递归法来完成。即第一个被选中的圆圈图片中心点与第二个被选择的圆圈图片中心点相连,第二个被选择圆圈武汉理工大学毕业设计(论文)15图片中心点与第三个被选择圆圈图片中心点相连,直到连到最后一个被选择九宫格点。 圆圈图片中心点到圆圈图片中心点的显示与圆圈图片中心点 连接普通像素点都是直接调用draw
37、line 函数完成。图 2.15 判断圆圈图片显示状态程序需要显示的点都被输入模块记录到了 spoints 数组中,因此只需将 spoints 中的所有圆心点依次用线连起来就能大概显示出轨迹路径。圆圈图片圆心点到普通像素点之间连线显示只需调用drawline()函数绘制 spoints 数组最后一个点到用户手指所在像素点的连线即可,图2.16展示的是连线显示的流程图。开始i=1,tp=spoints.get(0)ispoints.sizep=spoints.get(i)画tp和p之间连线i=i+1结束yn图 2.16 连线显示流程图开始p.state=1?该圆心点对应圆圈图片显示为已选择该圆心
38、点对应圆圈图片显示为初始结束武汉理工大学毕业设计(论文)16第 3 章 基于轨迹识别的安卓屏保程序实现3.1 android 应用的构成和工作机制介绍对于一个android应用程序来说,是由activity、intentreceiver、service、 content provider四部分组成,但并不是每一个 android应用程序都必须由这四部分组成。在应用程序中使用时,需要在配置文件 androidmanifest.xml中进行配置。这个配置文件是每个 android应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件等。活动就是一个有生命周期的对象。一个活动就是完成某些工
39、作的代码块,这部分工作还可能包括对用户ui界面的显示。不过这不是必须的,有些活动从不显示 ui界面。 视图可以将其自身绘制到屏幕上。 android的用户界面由一系列的视图树构成。接口都是由一组以树的形式出现的视图组成的。开发者可以通过创建一个新的视图的方法来使用自定义的图形处理技术,这次开发基于轨迹识别的安卓屏幕保护程序就需要创建一个 “九宫格视图”。活动是一个android应用程序四个组件中最常用的一个。每个活动都是 activity的子类,并实现了一些独有的功能,如管理 ui显示和ui的反馈事件。一个活动就相当于应用程序的一个用户界面,由事件响应以及视图等组成。大多数的应用程序通常包括多
40、个界面。 这次开发的基于轨迹识别的安卓屏幕保护程序就需要建立 两个活动。即手势密码输入活动,手势密码重置活动。每个界面其实都可看作是一个活动。显示一个新界面就相当于生成一个对应的活动对象。在一些情况下,活动能够返回给它的上级界面一个返回值,例如一个提供给用户选择照片的活动可以返回给它的调用者用户选择了哪个照片文件。 当一个新的活动出现时,前一个活动被中断并被放入到一个历史堆栈中。用户可以使用返回键使前一个活动重现。当一个活动不再需要时,可以将它们从历史堆栈中移除。默认情况下, android会为每个应用程序保留从主界面开始的历史堆栈。 android通过一个被称作意图的特殊类,来实现界面与界面
41、之间的跳转。一个意图描述了一个应用程序想要做什么。在意图的描述结构中,含有两个重要的数据结构 :动作和动作对应的数据。典型的动作类型包括 main、view、pick、edit等等,而动作对应的数据则以uri的形式表示。android用程序的生命周期是由android框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序(入口一般会是一个活动的 oncreate方法),都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。一个活动类别除了 oncreate方法之外,还预先定义了onpause(暂停)、onresu
42、me(继续)等的基本方法,当从一个活动切换到另一个活动的时候,武汉理工大学毕业设计(论文)17原来的活动将经过一连串的状态改变。开发者可以在程序中添加一些各状态相对应的流程,每次活动状态改变时,就会执行相对应的流程。要让用户有好的使用体验,活动需要在各 个周期中负责保管状态、恢复状态、传送资料等工作。3.2. 九宫格视图模块实现安卓系统能通过 bitmapfac tory.decoderesource()函数调用图片资源。设计自定义九宫格视图设计,首先得准备圆圈图片的图片资源。图片资源的大小会直接影响到九宫格视图设计的效果。考虑到有的手机屏幕太小,根本容不下九宫格视图,有的手机屏幕太大,九宫格
43、无法充满整个屏幕。所以每张图片资源都得缩放到适应屏幕的大小。创建缩放函数 bitmaputil.zoom 可以实现图片的缩放,但必须先求得缩放参数 t,缩放参数即图片需要放大的倍数。函数 bitmaputil.zoom()代码如下:public static bitmap zoom(bitmap bitmap, float zf) matrix matrix = new matrix();matrix.postscale(zf, zf);return bitmap.createbitmap(bitmap, 0, 0, bitmap.getwidth(),bitmap.getheight(),
44、matrix, true);通过计算得到参数图片缩放倍数 t:(1) 获取取原始图片大小 r1;(2) t=r/r1。其中 r 是九宫格视图定义中求得的参数。九个点的各个位置也在九宫格视图设计部分已经确定,用 new poin()函数创建九宫格九点 mpoints33。部分代码如下:mpoints00 = new point(x -r, y -r);mpoints01 = new point(x, y-r);mpoints02 = new point(x +r, y -r);mpoints10 = new point x -r, y);mpoints11 = new point(x, y);m
45、points12 = new point(x + r, y);mpoints20 = new point(x -r, y+r);mpoints21 = new point(x, y +r);mpoints22 = new point(x + r, y +r);最后在九个点的位置上绘制下初始状态下的原点图片。调用 drawbitmap()函数调用已缩放的图片资源并且将图片显示在指定位置。武汉理工大学毕业设计(论文)18函数对应用程序窗口的客户区进行绘图的所有代码都必须写 ondraw()这个函数中。在 lpwv 视图重写该函数实现函数界面的设计。3.3 输入模块实现 输入模块是软件功能实现里很重
46、要的一环。首先创建检查函数check (ex, ey)。check(ex, ey)函数代码如下:private point checkt(float x, float y) for (int i = 0; i mpoints.length; i+) for (int j = 0; j mpointsi.length; j+) point p = mpointsij;if (roundutil.checkinround(p.x, p.y, r, (int) x, (int) y) return p;return null;该函数的实现的主要功能是将用户手势轨迹经过的所有九宫格圆圈记录下来。其中判
47、断用户手势轨迹是否经过莫圆圈图片的依据是当前用户手势坐标与该圆圈图片中心的欧式距离是否r,r为圆圈图片半径。当手势轨迹经过某圆圈时,还得判定该圆圈是否就是已经记录的,如果是,不重复记录,如果不是,那就增加一个新点。这个新点的添加函数为spoints.add(point)。spoints是一个能添加手势轨迹记录点的点集。3.4 显示模块实现(1)点的显示创建的点类的属性有p,index,x,y。创建的时候,点参数state 均为0;当点判定为被选择的时候,点state 设置为1。 使用drawbitmap 方法来在图像上直接调用资源图像绘制。调用drawbitmap 函数在九宫格视图上的九个点位
48、置绘制点图片。表示根据p 点状态的不同,所绘制的点也不同 (2)线的显示调用arraylist 类 spoints 对象对象所记录的点,spoints 对象所记录的点即系统捕获到的用户手势轨迹经过的九宫格原点。点与点间的连线用递归法连接起来。即第一个点与第二个相连,第二个点与第三个点相连,直到连到最后一个点 。创建drawline 函数在两点之间武汉理工大学毕业设计(论文)19画一条线。drawline 函数调用 canvas.drawbitmap 函数调用已经存在的线图资源,将连线显示。重载drawline(canvas, tp, new point(int) moveingx, (int)
49、 moveingy)函数将九宫格点和屏幕中的一个普通点连接起来。连线显示代码如下所示。for (int i = 0; i mpoints.length; i+) for (int j = 0; j mpointsi.length; j+) point p = mpointsij;if (p.state = 1) canvas.drawbitmap(locus_round_click, p.x - r, p.y - r,mpaint); else canvas.drawbitmap(locus_round_original, p.x - r, p.y - r,mpaint);3.5 密码存储模块
50、实现密码存储模块的第一步就是将输入轨迹转化为轨迹字符串码。将输入轨迹转化为轨迹字符串程序代码如下:private string topointstring() stringbuffer sf = new stringbuffer();for (point p : spoints) sf.append(,);sf.append(p.index);return sf.deletecharat(0).tostring(); else return ;sharedpreferences 类,它是一个轻量级应用程序内部轻量级的存储方案,使用 shared preferences 保存数据,能将数据存入到
51、 xml 文件中。此处用调用 context 对象的getsharedpreferences()方法。使获得的 sharedpreferences 对象能被同一应用程序下的其他组件共享。创建一个 sharedpreferences.editor 对象,调用 sharedpreferences.editor 对象的putstring 函数来实现存储字符串到“password”中。这样索引字符串就以以间值对的形式存储到静态 xml 中。具体代码如下:武汉理工大学毕业设计(论文)20public void resetpassword(string password) sharedpreference
52、s settings = this.getcontext().getsharedpreferences(this.getclass().getname(), 0);editor editor = settings.edit();editor.putstring(password, password);mit();3.6 密码比对模块实现sharedpreferences 的对象调用方法 getstring(sigle_play, null),方法返回一个string 类型的值,创建一个private string getpassword()函数,在该函数下创建一个 context 对象,通过s
53、haredpreferences 对象获取数据。创建一个private string getpassword()函数将即可将值返回。当用户输入验证密码时,这个密码不需保存。该模块只需调用 string 类的一个比对函数,即equals 函数。比较用户输入的密码与通过调用getpassword 函数调用到的“password”字符串是否相同,当相同时密码验证成功。不同时验证失败。 部分代码如下:public boolean verifypassword(string password) boolean verify = false;if (com.way.util.stringutil.isno
54、tempty(password) if (password.equals(getpassword()verify = true;return verify;3.7 程序界面设计android 的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式,和各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对各配置文件进行读取。这样就可以形成不同的可视化界面和。本程序设计需要为主界面,密码验证界面,密码重置界面分别设计一个布局文件。(1)输入界面整体上设置为帧布局。在帧布局 framelayout 下创建了一个文本框控件,一个自定义的九宫格控件,和一个按钮控件。布局帧布
55、局中,属性值fill_paren设置帧布局充满整个屏幕;设置帧布局的背景为drawable/welcome_bg;属性值10dip设置帧布局的内容距离帧布局左右边界为10像素。武汉理工大学毕业设计(论文)21布局“请输入手势密码”文本控件能设置该文本控件内文本的颜色和位置,以及该文本控件自身的位置。其中的 fill_parent 属性,文本控件的宽度为填满父布局;属性wrap_content 设置文本控件的高度根据文本控件里的内容自动拉伸内容自动拉伸;属性center_horizontal,将文本控件设置为水平方向上居中显示;将文本控件到屏幕上边界的距离设置为 20 像素;属性 cente 设
56、置文本的文字位置设置为居中。属性android:color/white 设置文本字体颜色为白色。布局九宫格,设置属性值 fill_parent,使九宫格视图充满整个屏幕。属性值 wrap_content,设置按钮的宽度和高度随着按钮内容而拉升;属性center,设置按钮位于屏幕中央;将按钮上的内容的位置按设置为距离按钮左右边界 15 像素;属性gone,设置按钮不可见。(2)布局文件main_activity设置主界面。设置linearlayout线性布局为主结构。在linearlayout线性布局控件下创建了两个文本控件。属性值 fill_parent 设置线性布局的高度为充满整个屏幕;属性
57、值center设置线性布局里的内容居中显示;属性值vertical设置线性布局方向为垂直布局。第一个文本控件布局中,属性值 wrap_content 设置该文本控件的高度和宽度为包含控件内容。设置文本内容距离该文本控件边界为 10 像素。(3)布局文件 setpassword_activity 设计密码设置界面。密码设置界面布局文件主结构为相对布局。在相对布局控件下创建了文本控件,九宫格控件以及两个按钮控件。相对布局控件代码中,属性值fill_parent设置相对布局控件充满整个屏幕;属性值drawable /welcome_bg设置相对布局控件背景;属性值 vertical 设置相对布局为垂
58、直布局;设置相对布局的子控件距离相对布局控件左右边界 10 像素。文本控件布局中,属性值wrap_content设置文本控件大小随着内容拉伸;属性值true 设置文本控件与父控件上边重合以及在父控件中水平居中;设置文本控件距离屏幕父控件上边缘 15 像素。九宫格控件布局中,属性值fill_ parent设置九宫格充满整个相对布局父控件。第一个按钮控件布局中,属性值 wrap_content 设置该按钮控件大小随着内容拉伸;属性值true设置该控件的底边和左边与父控件的底边和左边重合;设置该按钮控件与父控件左边和底边都距离 15 像素;设置按钮内容与按钮左右两边界距离都为 30 像素;第二个按钮
59、空就布局代码中,属性值 wrap_content 设置该按钮控件大小随着内容拉伸;属性值true设置该控件底边和右边与父控件的底边和右边重合;设置该按钮控件与父控件底边和右边的距离都为 15 像素;设置按钮内容与按钮左右两边界距离都为 30 像素;设置按钮的文本内容为“重绘” 。武汉理工大学毕业设计(论文)223.8 配置 androidmanifest.xml在 android 系统可以启动一个应用程序组件之前,android 系统必须通过读取这个程序的 androidmanifest.xml(即 manifest 文件)文件来确定要启动的组件存在。程序必须在这个 manifest 文件声明
60、用到的所有的组件,并且这个 manifest 文件必须在项目的根目录下。活动组件声明方式为。新建的工程目录会自动生成一个 androidmanifest.xml 文件,此配置文件是整个程序能够正常运行的核心,它里面包含了 android sdk 的版本,程序运行的默认 activity,当程序中的任何一个组件触发事件后,系统都会自动的去 androidmanifest.xml 中寻找标识来作出相应的操作。 android 系统有一个编码的规定,支持的编码是utf-8,当程序中出现乱码是,须将其编码格式转化为utf-8.在 androidmanifest.xml 中会在第一行声明一句:。它是该系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 涉密打印机耗材更换保密管理(课件)
- 巴州安全生产指南讲解
- 2025年福建海峡银行龙岩分行诚聘英才备考题库有答案详解
- 博士就业方向与职业发展路径
- 2025年雅安市公安局交警支队辅警人员招聘笔试试卷附答案
- 2025年卫生监督执法法律法规口试模拟试卷及答案
- 2025中国人民大学附属中学海口实验学校冬季面向全国自主招聘74人(第一号)考试重点题库及答案解析
- 2025重庆万州区第一人民医院招聘2人考试重点试题及答案解析
- 广州市2024自然资源部北海局所属事业单位招聘博士研究生10人笔试历年参考题库典型考点附带答案详解(3卷合一)
- 2026年福建省莆田市市直学校公开招聘新任教师86人备考题库附答案
- 【MOOC】健康传播:基础与应用-暨南大学 中国大学慕课MOOC答案
- DL∕T 1785-2017 电力设备X射线数字成像检测技术导则
- T-CCIIA 0004-2024 精细化工产品分类
- 世界当代史教材
- 至美无相-现代数学天文物理漫谈智慧树知到期末考试答案章节答案2024年中国海洋大学
- 《创伤失血性休克中国急诊专家共识(2023)》解读
- 王立铭进化论讲义
- Hyperion预算管理信息系统介绍
- 第三、四单元综合测试卷(含答案)-统编版语文高一下学期必修下册
- 基本心理需要满足量表BPNS
- 焊缝外观检验规范(5817 VT)
评论
0/150
提交评论