基于Android系统的手机防盗-毕业论文设计_第1页
基于Android系统的手机防盗-毕业论文设计_第2页
基于Android系统的手机防盗-毕业论文设计_第3页
基于Android系统的手机防盗-毕业论文设计_第4页
基于Android系统的手机防盗-毕业论文设计_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

摘要近年来,智能的功能日趋强大,移动终端应用程序层出不穷。由于现在人们的工作繁忙,的丧失似乎也成为常有的事。与之带来最让人烦心的是私人数据的丧失及带来的不平安隐患。基于以上原因,本文设计了一款防盗追踪软件。本软件利用Android系统的播送机制,当用户开启防盗追踪功能后,本程序将后台监听开机启动、信号状态、短信收发以及位置的改变,通过监听用户SIM卡的IMSI码的改变来判断平安状态,监听并截获平安短信内容,实现非法用户的号码向合法用户预先设置的平安号码发送特殊信息的功能,告知用户当前状态和位置信息,并可通过平安短信控制被盗锁屏、销毁隐私数据、发报警音等功能。最后将设计完成的软件进行测试,其所有功能都完美实现,真正起到了防盗追踪的作用。关键词:Android系统防盗播送机制监听器ABSTRACTInrecentyears,theintelligentmobilephonefunctionispowerful,themobileterminalapplicationemergeinanendlessstream.Becausenowpeople'sbusywork,thelostmobilephonealsoseemstobeacommonthing.Andbringthemostdisturbingisaprivatedatalossandinsecurityhiddentrouble.Basedontheabovereasons,thispaperintroducesthedesignofamobilephoneanti-thefttrackingsoftware.ThissoftwareusesAndroidsystembroadcastmechanism,whenthemobilephoneuserstoopenanti-thefttrackingfunction,theprogramwillmonitorthebackgroundmobilephoneboot,signalcondition,sendandreceivetextmessagesandachangeoflocation,throughthemonitoringmobilephoneuserSIMcardIMSIcodechangestodeterminemobilephonesafetystate,monitorandinterceptsasecuremessagecontent,realizetheillegaluserthemobilephonenumbertothelegitimateuserpresetsafetynumberstosendspecialmessagetoinformtheuserofmobilephonefunction,currentstatusandlocationinformation,andthroughSMSsecuritycontrolofstolenmobilephonelockscreen,thedestructionofprivacydata,sendalarmsoundandotherfunctions.Finallycompletedthedesignofthesoftwaretesting,allofitsfunctionsareperfect,playedarealmobilephoneanti-thefttrackingfunction.Keywords:AndroidsystemDroidRingBroadcastingmechanismListener

目录1 绪论 1 应用开发研究背景与意义 1 国内外研究现状 2 国内研究状况 2 国外研究状况 2 开发研究内容 32 防盗应用开发的根底 4 Java根底 4 Android根底 43 防盗应用方案的设计 5 UI设计 53.1.1 UI窗口层 63.1.2 UI主层 83.1.3 UI功能体验层 83.1.4 UI指令查看层 93.1.5 UI信息设置层 10 Function设计 11 应用初始化 11 功能选择 11 功能体验 12 功能查看 12 功能设置 12 Service设计 12 数据库存储效劳 12 监听按钮事件效劳 13 开机启动和短信播送效劳 13 GPS效劳 14 私人数据的管理 144 防盗应用方案的实施 15 UI的实现 15 Activity 15 ListActivity 20 PreferenceActivity 24 Dialog 26 由Sever支持的Function实现 27 播送机制效劳 27 换卡短信通知 30 定位 31 数据销毁 32 锁定 34 发报警音 35 数据库存储应用 365 防盗应用测试 37 防盗应用初始化 37 定位功能测试 37 换卡短信通知功能测试 38 锁屏功能测试 39 销毁数据 40 发报警音 406 防盗应用说明 41结论 42致谢 43参考文献 44附录一 45附录二 46附录三 53绪论应用开发研究背景与意义随着3G技术的不断开展,移动应用开发成为目前热门的技术之一。种类繁多的应用以及先进的硬件,使得已经不完全是用来通话的工具了,它巧妙的融合了PDA(PersonalDigitalAssistant,掌上电脑)、数码相机以及MP3等诸多功能,一机多能且不断向专业化迈进是现在的开展方向[1]。功能的增多以及不断完善,自然价格也上下不一,好的可以卖到笔记本的价格。关于我们能想到很多人们担忧的话题。而最为愁人的就是现在的大都兼容各种卡,一旦丧失,就会机卡两空。在我们忙碌的工作生活中,似乎丧失已经成为了一种自然的事情。其实不管你的值不值钱,丢东西的事情本身就会让人头疼。那么该怎样制服盗机者,在我们提高自身防范意识的同时,适当的为增加些防盗功能也是应该的。在众多操作系统中,Android操作系统由于他的完全开放性使得其应用人群独占鳌头。图STYLEREF1\s1.SEQ图表\*ARABIC\s11Android系统构架Android〔智能机器人〕是Google开发的基于Linux平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,其系统构架如图1.1所示,被誉为第一个完整、开发而免费的移动平台。Google提供在线文档、工具、论坛和软件开发工具包等资源,以便开发者在Android平台上开发应用程序。并且众多制造商,如三星、摩托罗拉、HTC、LG和小米等,还有许多半导体公司,如英特尔、德州仪器、NVIDIA和高通等,参与Android设计。由此可见,Android开展前景不容小觑,已成为目前主流的操作系统之一。Android设备运行在Linux操作系统下,这使得其上运行的Android应用程序具有很强的平安性。每一个Android应用程序均运行在不同的进程中,每个进程都对应一个Dalvik虚拟机的实例。基于Java虚拟机,Dalvik为移动设备进行了优化设计。Dalvik虚拟机具有较小的内存占用,而且多个Dalvik虚拟机的实例在设备中可以并发运行。Android应用程序为托管代码,所以,由应用程序而导致系统崩溃的可能性很小,这也降低了设备崩溃的可能性[2]。综观Android系统,我们不难发现,应用本系统开发的生产厂商多,用户基数大,平安性高,并受到众多大牌公司支持,基于以上优越性,在Android系统上开发本防盗应用具有重要的现实意义。国内外研究现状国内研究状况毋庸置疑防盗应用肯定归属于平安类软件,对于平安软件的开发与研究又是杀毒软件公司首要考虑的功能之一,所以国内的很多杀毒软件公司在自己的产品中都涉及了防盗功能。例如金山卫士、360卫士、QQ管家等保护系统平安类软件中具有防盗功能。图STYLEREF1\s1.SEQ图\*ARABIC\s11防盗国外研究状况英国一家效劳公司宣布推出一整套防盗软件的效劳,使用该效劳的用户在被盗后不仅可及时转移信息,还能发出刺耳鸣声,让窃贼根本无法使用所盗。当用户在中安装这款软件后,每月只需支付10英镑〔约合18美元〕即可享受防盗效劳。一旦被盗,用户可立即致电公司。公司随即向被盗发送指令,将里面存储的信息全部转移至平安效劳器,随后锁定功能并使发出刺耳的鸣声。该公司介绍说,防盗程序启动后,窃贼即便更换SIM卡也无法解除锁定。此外,只要不取出电池,鸣声就不会停止。用户购置新后,还可申请将原来中的全部信息转移至新内。据伦敦市警察局统计,该市每月约有1万部被盗。警方希望这一防盗软件能改善这一局面[3]。美国的苹果公司,在其官网上向所有用户提供了一项云端技术效劳,只要苹果或者苹果的其他移动设备,都可以享受到卫星定位功能。具体做法是:首先,在拿到苹果后,你要先申请属于你的Apple

ID,登录苹果商店或者在Mobile

Me上注册,这个应用就可以实时定位你的iPhone的位置。图STYLEREF1\s1.SEQ图\*ARABIC\s12苹果防盗开发研究内容从上面的应用我们可以看出,无论是国内还是国外,只要是致力于防盗功能的软件,其最核心功能都用到了GPS、锁屏、媒体播放等。因此,综合以上各软件优点,新型的防盗应用软件应具有GPS定位、被盗时锁屏、通过短信控制以最大音量发报警音、远程销毁隐私数据以及偷拍盗窃者长相等功能。同时,防盗应用软件也应充分利用操作系统固有的资源。因此,本课题的任务是设计一款基于Android平台开发的一款防盗软件。通过Android系统中的播送机制后台监听的各种状态,根据状态的改变来判断是否平安。一旦丧失,我们便可通过向失窃发送指令短信的方式,应用Android系统的GPS(GlobalPositioningSystem,全球定位系统)、SMS(ShortMessagingService,短信效劳)、Activity(用户界面)、BroadcastReceiver(播送机制)、Intent(请求)、Service(效劳)以及Contentproviders(访问数据库)等技术控制并获得具体位置,旨在为丧失用户找回提供了重要依据。

防盗应用开发的根底Java根底Java由Sun(StanfordUniversityNetwork)公司于1995年5月为增强互联网的交互性而设计。Java语言最早的名字为C++--,从名字上我们可以看出,Java语言的原型为C语言,后经大量优化在C根底上增增减减,最终设计出这款现在企业级开发的第一语言[4]。Java语言具有极强的跨平台能力,多语言的支持,占据着互联网开发语言的首位。基于Android系统的应用全部应用Java语言编写完成。所以,想在Android系统上做出一个好的应用来不仅要会Java语言,而且还要运用熟练。对此,我通过观看Mars老师的Java4Android视频和对Java相关书籍的精读与练习,强化了自己对Java语言的掌握,使我对Java的运用能力有了很大的提高,并为编写与设计Android应用奠定了良好地根底。Android根底知己知彼者百战百胜。想在Android系统上做开发,就一定要了解Android系统,知道他的由来和内部构造。Android操作系统最初主要支持,2005年Google收购了刚刚成立22个月的Android公司,也正是有了在Google这样巨头公司下开展的时机才使得Android系统迅猛开展。2007年11月5日,以Google为首的34家公司宣布成立OHA(OpenHandsetAlliance,开放联盟)。2021年9月22日,美国运营商T-MobileUSA在纽约正式发布第一款Google--T-MobileG1。Android平台的主题思想和Google是一样的,就是随时随地为每个人提供信息[5]。图STYLEREF1\s2.SEQ图\*ARABIC\s11Android版本最早的Android版本为Android1.0〔发条机器人〕,自Android系统发布第一版本到现在已经更新屡次。AndroidBeta〔阿童木〕2021年9月发布的Android第一版,后来由于涉及到版权问题,Goolge将其命名规那么变更为用甜点作为它们系统版本的代号的命名方法。其各版本logo如图2.1所示。图STYLEREF1\s2.SEQ图\*ARABIC\s11Android版本Android1.5Cupcake〔纸杯蛋糕〕Donut〔甜甜圈〕AndroidEclair〔松饼〕Froyo〔冻酸奶〕Gingerbread〔姜饼〕Honeycomb〔蜂巢〕Honeycomb〔蜂巢〕Honeycomb〔蜂巢〕Android4.0IceCreamSandwich〔冰激凌三明治〕JellyBean〔果冻豆〕

防盗应用方案的设计在电子领域,要想拥有很好的市场前景,就必须应用最先进的设计技术、最成熟的设计理念以及最合理的设计方法才能使得产品得以开展。于是我选择了目前市场应用最为广泛的金山卫士、360卫士和QQ管家其中的防盗局部作为参考。学习并比照这3家在此功能上的不同。分别在UI(UserInterface,用户界面)、Function(功能)和Service上做了比拟。表格SEQ表格\*ARABIC1防盗UI、Function和Service比照比对参数金山防盗360防盗QQ防盗UI初始化设置步骤3步3步4步主界面信息栏个数6个6个5个进入应用层界面效果以文字为主视图+文字以文字为主UI层底色灰色白色白色Function主要功能换卡短信通知销毁数据定位发报警音锁定防盗拍照换卡短信通知删除数据追踪位置响报警音锁定数据删除定位找回密码远程锁机输入错误提示一般精准一般ServiceGPS定位功能有有有短信监听发送有有有开机监听有有无从表格1中我们可以很清楚的看到,在UI方面360更为注重,以多图少字的方式展现功能,使用户更加喜欢,也方便了用户对功能的理解。不过从Function上来看,金山防盗的设计就要优于另外两家,在所有功能的根底上还加进了一项防盗拍照,这是仅有4项功能的QQ所没能想到的平安设计。综合以上软件优点便是此软件将要实现并到达的目标。因此我将结合360的UI、金山的Function和Service做出一款即看上去漂亮而且功能也强大的防盗软件。UI设计UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由,充分表达软件的定位和特点。如图就是一副很美观的UI。图STYLEREF1\s3.SEQ图\*ARABIC\s11UI软件设计可分为两个局部:编码设计与UI设计。编码设计大家都很熟悉,但是UI设计还是一个很陌生的词,即使一些专门从事网站与多媒体设计的人也不完全理解UI的意思。UI的本意是用户界面,是英文User和Interface的缩写。从字面上看是用户与界面2个组成局部,但实际上还包括用户与界面之间的交互关系。在飞速开展的电子产品中,界面设计工作一点点的被重视起来。做界面设计的“美工〞也随之被称之为“UI设计师〞或“UI工程师〞。其实软件界面设计就像工业产品中的工业造型设计一样,是产品的重要卖点。一个电子产品拥有美观的界面会给人带来舒适的视觉享受,拉近人与商品的距离,为商家创造卖点。界面设计不是单纯的美术绘画,他需要定位使用者、使用环境、使用方式并且为最终用户而设计,是建立在科学性之上的艺术设计[6]。综合上述UI设计特点,加上方便实用的设计特点,我将本防盗应用的UI分为了5层,他们由UI窗口层、UI主层、UI功能体验层、UI功能查看层和UI功能设置层组成。其层次流程如下图。图STYLEREF1\s3.SEQ图\*ARABIC\s12UI总流程图UI窗口层UI窗口层分为两个界面,一个是初次开启应用时进入的设置初始化界面,另一个那么是用户在非第一次开启应用时弹出的用户身份验证窗口。图STYLEREF1\s3.SEQ图\*ARABIC\s13初始化设置当用户第一次开启应用时,展现在用户眼前的是一个设置初始化界面,如下图。用户可按照相应提示完成放到设置,其中包括设置防盗平安密码和设置平安号码。防盗平安密码将用于验证应用本软件用户的身份,在非第一次开启此防盗软件时将需要用户输入防盗平安密码。另外,设置好的防盗平安密码将会编进防盗指令,用于控制实现相应的操作。平安号的设置非常重要,设置成功后,此号码将被认为是唯一可信赖的号码,当被盗后,防盗软件将会按照指令向平安号码发送状态。图STYLEREF1\s3.SEQ图\*ARABIC\s14验证窗口图展现的是用户在非首次开启应用时弹出的验证用户信息窗口。此通行密码为用户设置的防盗平安密码,通过此方式保证了用户设置信息的平安性。UI窗口层为本应用软件的最顶层,此层的UI设计好坏决定了用户对本软件的第一印象,所以要想得到用户的肯定,这层的设计一定要做好。为此,在选择文字的字体、颜色、大小以及摆放位置做了无数次的调整,努力到达最好、最舒适。除了这些我还在输入文本框里加进了提示信息如:输入密码框里的“6~12位数字或字母〞等,在方便用户应用的同时也美化了UI。UI主层UI主层是个选择界面如图,本层为用户提供3种主要操作,分别为防盗功能体验、防盗指令查看、防盗信息设置。图STYLEREF1\s3.SEQ图\*ARABIC\s15UI主层在本层UI的上面是一个宇宙图片,寓意着安装本应用后,即使你的被带到了宇宙我们也能找到它,当然这有些夸张了,不过我们还是要对此软件充满信任的。除了这张宇宙图片我还在每个选项前后都加附上了相应功能的logo,学习360的多图设计,用视觉告诉用户本条选项的功能。为到达UI布局整齐的效果,我采用列表式布局,将选项按照用户需求量进行排布,这样的布局可是UI实现整齐、清晰、功能突出等效果,属于理想的UI设计。UI功能体验层UI功能体验层如下图,此UI界面同样继承优良设计布局方案将本应用所有功能统一以列表形式列出,最前端图标代表着此条选项所要实现的功能,然后每个选项的功能说明以大字功能名加小子简要说明的形式整齐的展现在界面上,让用户对选项功能一目了然。图STYLEREF1\s3.SEQ图\*ARABIC\s16UI功能体验层当用户点击进入UI功能体验层的每个选项后,就会看到每个功能实现的具体说明,而且在每个可以单机实验的功能里都加进了功能体验按钮,可以让用户体验本功能的真实效果。其效果图见附录一。UI指令查看层在UI指令查看层,总结罗列了开启每个防盗功能的防盗指令,用户可以在这里方便快捷的得到所需防盗指令,如下图。图STYLEREF1\s3.SEQ图\*ARABIC\s17UI指令查看层UI信息设置层UI的设置层是UI非常重要的一个视图层,此层要以最方便,最简约,最快捷为核心排版设计,而且要尽量覆盖本软件的所有功能设置。基于以上要点,首先总结本防盗软件的设置功能如表2。表格SEQ表格\*ARABIC2设置功能所需功能功能目的功能表达形式设置此功能键的意义防盗开关方便控制防盗功能的开启与关闭开关按钮可以方便用户对防盗应用软件的控制,无需卸载就能关闭防盗换卡锁定开关防止因用户自己换卡执行错误指令开关按钮在防止发送错误指令的同时,用户也可通过此开关对锁定功能进行单独体验换卡短信通知开关防止因用户自己换卡执行错误指令开关按钮在防止发送错误指令的同时,用户也可通过此开关对换卡短信通知功能进行单独体验防盗密码重置用于修改平安密码加密形式方便用户在首次初始化后改变防盗平安密码平安号重置用于修改平安号码显示预置号码方便用户在首次初始化后改变防盗平安按照表格2中的功能需求,我在设置UI里建立了与之相应的5个控件,以方便用户对软件的应用控制。最终设计出图的效果来实现功能。图STYLEREF1\s3.SEQ图\*ARABIC\s18UI设置层Function设计我们在UI的设计中了解到一款软件拥有一个美观的UI是多么重要,那我们该如何实现这种华美的显示呢?这就需要又一个很好的后台设计既功能设计。应用初始化初始化界面是让用户设置信息用的,所以首先我要告诉用户需要设置的信息都有哪些,介绍完后还要在相应的位置给出用于填写信息的控件。这里我们用Android中最常用的TextView和EditText两个布局控件满足需求。并且在EditText里参加hint属性显示相关提示信息。对于密码的设置,我们都希望处于不可见状态以保证我们个人信息的平安,我用password属性来控制输入时的显示状态。在整个UI的最下面我还放置了两个按钮,方便用户的进一步应用和退出,此功能将用Button控件实现。功能选择功能选择的UI主要分为两局部,可以从上到下分为两段,在布局控件中用LinearLayout实现,并设置排版属性为垂直布局。上半部为一个图片,下面那么需要一个List控件完成效果,整个UI的程序将用继承ListActivity类来描述已到达选项罗列的效果[7]。图为Android的文件管理。在Android中所有资源文件要统一管理并放到res文件夹中,并把每个资源都加上各自的ID,以方便调用。所有的调用ID那么会放到gen文件夹下的R.java文件中进行统一遍历,我们所要的资源便可从这里索取。例如我们的宇宙图片。图STYLEREF1\s3.SEQ图\*ARABIC\s19文件管理功能体验功能体验UI分为两层呈现。外面一层同样用一个继承ListActivity的类来实现,在list空间里排布好每个图标和文字的位置,这里要用到ImageView控件添加图片。内层那么是一个介绍体验层,这层的总体排布用LinearLayout的垂直分布就可以完成。添加Button按钮实现用户体验功能。功能查看这个界面完全是文字的排布,同样用ListActivity加以LinearLayout垂直型布局就可以完成。功能设置功能设置UI为用户可操控界面,所以要使用继承PreferenceActivity的类来完成相应的功能,此类是Android专门用来做UI设置界面用的,所以这个类中方法的应用也相对方便,但其布局文件与众不同,需要在res文件中新建个XML文件进行单独管理。其布局空间类型主要分为3大类AppWidgetProvider、PreferenceScreen和Searchable,其中最常用的是PreferenceScreen,在这里又包含CheckBoxPreference、EditTextRreference、ListPreference、Preference、RreferenceCategory、PreferenceScreen和RingtonePreference7个控件[8]。我们的UI设置界面就用PreferenceScreen来完成。Service设计防盗应用软件在实际应用过程中一定是常驻后台的软件,所以不管用户是否翻开软件,只要是开启了防盗功能,那此软件就会一直在后台运行,出于这样的考虑,我们就必须引进一个强大的后台支持,那就是Service既后台效劳。数据库存储效劳在Android系统中,用于保存数据有3种方式:SQLite、SharedPreferences和File。SQLite是一种嵌入式系统中很常见的数据库,而且所有的数据都储存在一个文件中,便于迁移。SQLite有见解的SQL访问界面、相当快的速度,而且仅占用相对其他数据库少量的内存空间。在Android平台上,SQLite库可以用来存储应用程序中使用到的数据,还可以通过定义ContentProvider等方式,来让其他应用程序也可以取用其中的数据[9]。SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储根本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。实际上sharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的FileExplorer中的/data/data//shares_prefs下。File是一种文件存储方式也是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。具体问题具体分心,根据我们的需要与要求,本程序最终选定用SharedPreferences来存储我们的数据。我们将用户设置的平安密码、平安号、防盗功能开关状态、SIM卡的IMSI码等信息以键值对的形式存入其中进行保存。一个Value对应一个Key值,如下图,Key值便是我们所保存的数据信息,这样的保存方式既快捷又准确。图STYLEREF1\s3.SEQ图\*ARABIC\s110数据库存储方式监听按钮事件效劳监听器是Android设计的一种监听模式,当用户执行了某些动作时,需要系统对这些动作做出相应的反响,那么这时就需要监听器来捕获这些来自用户的信息,将其传递给系统再做处理。在我们的软件中将会运用大量的监听器,其中包括监听用户点击按钮事件、监听开机播送事件、监听短信播送事件等。监听按钮事件,是将每个按钮绑定上一个监听器,用Button.setOnClickListener()方法来实现,当触发相应的监听器后我们就可以执行我们想要的操作了。开机启动和短信播送效劳防盗应用开启后会在第一时间对的SIM卡进行检查,判断时候更换。那么这种监听开机需要另一项Android机制的支持来完成——播送机制。在Android里面有各种各样的播送,比方电池的使用状态,的接收和短信的接收都会产生一个播送。图就是一张播送的运行机制原理图。图STYLEREF1\s3.SEQ图\*ARABIC\s111Android播送机制各种播送在Android系统中运行,当系统/应用程序运行时便会向Android注册各种播送,Android接收到播送会便会判断哪种播送需要哪种事件,然后向不同需要事件的应用程序注册事件,不同的播送可能处理不同的事件也可能处理相同的播送事件,这时就需要Android系统为我们做筛选。本软件就利用开机播送和短信接收播送来判断状态和控制。GPS效劳对于GPS我想大家现在都很了解,至少不会陌生,一般情况下每个装载GPS的设备都会由3颗卫星进行定位,在需要时可将设备所在的位置信息发送到GPS上,例如返回的经纬度,有了这些位置信息我们便可进行需要的操作[10]。在本应用中将会运用Android的GPS定位系统,为我们获取的当前位置,便于用户找回丧失的私人数据的管理当用户的丧失后恐怕最担忧的就是自己私人信息的外露,出于此考虑,本软件将通过继承IntentService的类,对用户的通讯录、媒体图片进行备份并向平安发送,同时将原有数据删除,以防止不法分子的非法企图。

防盗应用方案的实施按照防盗应用技术的设计理念,我将从UI入手,在做完界面的根底上组合、衔接并参加相应的功能,最后通过Service实现后台监听、储存、处理等功能。在实现这些功能之前我们需要先搭建Android开发环境,其具体操作流程见附表二。UI的实现在Android系统中,UI的构建主要都由Activity类来完成。为了开发方便,Android又构造了多个继承Activity类的子类。其中在我们的软件里用到了ListActivity和PreferenceActivity两个子类和Activity本身。Activity要使用Activity以及其子类首先要知道Activity的生命周期,只有知道其生命周期的顺序才能控制好界面的显示。图为Google官方给出的Activity生命周期流程图。图STYLEREF1\s4.SEQ图\*ARABIC\s11Activity生命周期在本软件中有8个UI直接通过继承Activity类构成,他们的应用方法大同小异,我就拿其中最复杂的初始化界面来介绍。初始化界面的整体设计流程图如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s12初始化UI流程图.java文件:首先新建一个继承Activity的类FirstPublicclassFirstextendsActivity{}在此类里面对UI界面进行编辑以下为关键代码:12345678910111213141516171819202122232425262728//覆写onCreate方法publicvoidonCreate(BundlesavedInstanceState){//绘制UI界面 setContentView(R.layout.first);//用findViewById的方法声明并得到Button控件Buttonbt_sure=(Button)findViewById(R.id.sure);//用setOnClickListener方法绑定Button监听器,获取用户点击按钮事件bt_sure.setOnClickListener(newOnClickListener(){}//用if……elseif……elseif语句对用户设置信息进行判断if(Str_password1.trim().equals("")||Str_password2.trim().equals("")){//用()方法做出相应提示Toast.makeText(First.this,"密码不能为空",Toast.LENGTH_LONG).show();elseif……else{//建立数据库编辑对象Editoreditor=sp.edit();//储存平安密码到数据库editor.putString("password",Str_password1);//提交改动到数据库并保存editormit();//创立intent对象Intentintent=newIntent();//指明跳转Activity intent.setClass(First.this,Main.class);//开启要跳转的UI First.this.startActivity(intent);图STYLEREF1\s4.SEQ图\*ARABIC\s13layout布局控件示意图:为Activity提供布局支持的layout文件是UI如何显示的控制中心,这个文件里的控件属性决定了控件的显示位置,图是为First提供布局控件的layout的示意图,其主要代码如下:1234567891011121314151617//第一行定义了布局文件所链接数据库的版本以及支持的语言,"utf-8"为中文。<?xmlversion="1.0"encoding="utf-8"?>//采用LinearLayout绝对布局的orientation属性定为vertical既垂直布局,第//一行属性为Android固定格式,我们不用过多研究<LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:orientation="vertical">//在布局文件中放进文本框并定义相关属性 <TextView/>//嵌套绝对布局的水平布局<LinearLayoutandroid:orientation="horizontal"<TextView/><EditTex/></LinearLayout>//嵌套相对布局<RelativeLayout></RelativeLayout>:Android中设立了一个统一管理文件,这个文件可以理解为Android的一个注册表文件,在这个文件中,我们可以声明我们自己定义的权限。如果所用的组件需要权限但没有在这个文件注册,应用程序就会无法正常运行。任何一个Activity类都是需要注册的,所以本应用的主要代码如下:12345678910111213141516171819202122232425262728293031323334//注册接受开机播送权限<uses-permissionCOMPLETED"/>//注册发送短信权限<uses-permissionandroid:name="android.permission.READ_SMS"/>//注册获取具体地址权限<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>//请求Activity显示<applicationandroid:icon="@drawable/dun"android:label="@string/fangdao"><activityandroid:name=".Main"android:label="@string/fangdao"android:clearTaskOnLaunch="true">//通过intent-filter设置首显Activity<intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application>//注册播送接受类 <receiverandroid:name=".BootCompleteReceiver"> <intent-filterandroid:priority="2147483647"><actionandroid:name="ent.action.BOOT_COMPLETED"></action> </intent-filter> </receiver>//注册效劳类 <serviceandroid:name=".GPS"></service> <serviceandroid:name=".SmsService"></service>ListActivityListActivity直接继承于Activity,是根本应用中最常用的一类应用程序。ListActivity用来在屏幕中显示一个列表,当点击其中的某一列时,可以触发一些操作。我们通过设置一个onListItemClick函数,来得到用户正选择了哪一列的信息,并做后续处理。使用了ListActivity类后,如果整个屏幕上只需显示一个列表,我们甚至可以把setContentView一行注释掉,不用定义列表的XML说明文件。因为ListActivity类已经默认绑定了一个ListView〔列表视图〕界面组件。图就是一个典型的ListView示意图。图STYLEREF1\s4.SEQ图\*ARABIC\s14ListView示意图在本软件中,UI主层和UI功能体验层的列表视图就是通过直接继承ListActivity这个类得到的。在继承ListActivity的类中要想显示列表内容就必须要调用setListAdapter(listAdapter)方法,在这个方法中需要传进一个listAdapter参数,这个Adapter通常我们叫做适配器,我们要显示出来的数据就储存在这个listAdapter当中。在list中的每一个数据都是一个HashMap。HashMap就是一种Map,在Map中数据都是以键值对的方式存在的,这样,我们的数据最终在List中的存储方式就是以键值对的形式存在的。我们只需要给Value对应的Key赋值就可以把我们要显示的数据装进List中了。下面以UI功能体验层为例根据图的程序流程图分析下代码:图STYLEREF1\s4.SEQ图\*ARABIC\s15体验功能UI流程图Java文件:1234567891011121314151617181920212223242526272829303132333435363738394041424344//首先我们的体验层要继承ListActivitypublicclassTiyanextendsListActivity//在这里设置各功能对应的数值 privatestaticfinalintdingwei=0;//定位 privatestaticfinalintxiaohui=1;//销毁数据 privatestaticfinalintsuoding=2;//锁定 privatestaticfinalintbaojing=3;//发报警音 privatestaticfinalinthuanka=4;//换卡短信通知//这里我们需要在layout文件中设置两个布局文件,一个用于主框架,另一个是为//list单独建立的,专门摆放list中的控件,下面这句代码就是主框架setContentView(R.layout.tiyan);//建立一个HashMap放进ArrayList中ArrayList<HashMap<String,Object>>list=newArrayList<HashMap<String,Object>>();//分别生成对象,以map1为例,后面4组方法相同HashMap<String,Object>map1=newHashMap<String,Object>();//向Map中对应位置装入数据,map1.put("tiyan","定位");map1.put("jianjie","获取当前位置,便于您找回");map1.put("img",R.drawable.dingwei);//将Map参加list,这样数据就存放在列表当中啦list.add(map1);//生成Adapter,并实现通过setListAdapter()方法实现listSimpleAdapterlistAdapter=newSimpleAdapter(this,list,R.layout.tiyanlist,newString[]{"tiyan","jianjie","img"},newint[]{R.id.tyxx,R.id.tyjj,R.id.tytb});setListAdapter(listAdapter);//覆写onListItemClick()方法获得用户点击事件 @OverrideprotectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ //TODOAuto-generatedmethodstub super.onListItemClick(l,v,position,id); Intentintent=newIntent(); // intent.putExtra("textIntent","123");//“防盗功能体验〞界面 if(position==dingwei) { intent.setClass(Tiyan.this,Dingwei.class); Tiyan.this.startActivity(intent); } elseif() ……}图STYLEREF1\s4.SEQ图\*ARABIC\s16ListActivity中layout框架layout.xml文件:图展示了在ListActivity中两个layout的布局框架,以下为代码分析:tiyan.xml文件:在文件中只有一个ListView控件123456789101112131415161718<LinearLayout <!--体验列表--> <ListView //这里注意ListView的id一定为list,这是android系统中默认的id,不能自拟。 android:id="@+id/android:list" //scrollbars属性为选择滚动条方向,这里我们定位垂直方向。 android:scrollbars="vertical"/></LinearLayout>tiyanlist.xml文件:RelativeLayout,以方便控件的摆放<RelativeLayout>//ImageView为图片View,是用于添加图片的控件 <ImageView/> //一下是两个文本信息,就是实际列表中要显示的值<TextView/><TextView/></RelativeLayout>PreferenceActivity在Android中有一个Preference类,用于的属性设置。因此当我们在界面上做设置的时候自然就会想到Activity+Preference的组合,前者用于界面的构造,后者用于设置数据的存放。不过虽然做法没错,但是会比拟繁琐,因为每个设置选项都要建立与其对应的Preference。当然Android的设计者也考虑到了这点,在系统中为我们提供了一个专门用于开发界面设置的类PreferenceActivity,这个类完美结合了Activity与Preference,很大程度的方便了我们的开发,因此我们的UI功能设置界面就是通过继承此类的类来实现。继承PreferenceActivity的UI设置界面的java文件无需过多的编程代码,因为在PreferenceActivity上做的任何设置,系统都会自动以键值对的方式储存到数据库里,当我们需要这些数据的时候,便可以直接从数据库里调用。所以我们只需要在布局文件中按需求添加控件就可以了。PreferenceActivity的布局文件有些特殊,需要在res文件夹下新建一个xml文件夹用于单独存放此类控件和布局属性,如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s17Preference的布局文件其shezhi.xml文件构架如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s18控件属性在本软件中的应用如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s19其代码就是对属性进行相应配置即可如android:password="true"等,这里就不做详细介绍了,具体代码请看附录二。DialogDialog是android开发过程中最常用到的组件之一,它包括以下几种类型:警告对话框:Alertialog进度对话框:ProgressDialog日期选择对话框:DatePickerDialog时间选择对话框:TimePickerDialog自定义对话框:从Dialog继承Dialog的创立方式有两种:一是直接new一个Dialog对象,然后调用Dialog对象的show和dismiss方法来控制对话框的显示和隐藏。二是在Activity的onCreateDialog(intid)方法中创立Dialog对象并返回,然后调用Activty的showDialog(intid)和dismissDialog(intid)来显示和隐藏对话框。区别在于通过第二种方式创立的对话框会继承Activity的属性,比方获得Activity的menu事件等。本软件就采用第二种方法用于显示弹出的对话框。其程序流程图如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s110Dialog流程图java文件关键代码如下:123456789101112131415161718192021222324//首先先创立一个Dialog函数 privatevoidputPWDialog(){ //渲染布局文件 LayoutInflaterinflater=LayoutInflater.from(this); Viewview=inflater.inflate(R.layout.putpwdialog,null); //生成Dialog对象并进行设置 AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setTitle("输入密码"); //显示Dialog界面 builder.setView(view); showputPWDialog=builder.create(); showputPWDialog.show(); //监听确定按钮 btn_sure.setOnClickListener(newOnClickListener(){ //信息核对提示 if(password.trim().equals("")){ elseif(password.trim().equals(savedPassword)){ else{} //监听退出按钮 btn_exit.setOnClickListener(newOnClickListener(){ //完全退出程序 publicvoidonClick(Viewv){ MyApplication.getInstance().exit(); } 经过大量的调整、核对以及调试,我们的UI界面就这样完成啦。到此为止把我们的软件安装到上就可以进行所有界面的切换了。由Sever支持的Function实现有了完整的UI,我们就可以在Function里实现这些UI对应的功能。对于任何一个软件来说,无论它有什么样的UI,人们最终想要获得的还是软件的功能。所以,只有Function的完美实现才能表达出一个软件的真正价值。播送机制效劳之前已经介绍了Android系统中播送机制的概念,这里就主要说明在本软件中所用到的3种播送——开机完成播送、效劳状态播送和短信接收播送。开机完成播送和效劳状态播送用于监测SIM卡的状态改变。当用户开机完成时,系统就会向接收开机完成播送的应用软件发送开机完成播送,告诉他们已完成开机动作,此时软件就可以在接收此指令后做出自己需要的动作,例如开机运行的软件就都需要接收开机完成播送。效劳状态播送也是同样的原理,当检测到信号后就会由系统向所有应用发送效劳状态改变的播送。短信接收播送是当接收到短信时Android系统向应用程序发送的一种播送。系统中自带的有些功能都要通过这种播送来完成动作。例如收到短信时会产生音乐和振动等状态,这就是由短息模块在接收到系统短信接收播送后作出的动作。为了接收来自系统的播送,Android为开发者提供了一个专门用于接收播送的类既BroadcastReceiver类,本软件就通过继承此类实现接收所有播送。在Android中光有接收的类还不行,要想让系统把播送发送到你的应用程序还必须在AndroidManifest.xml文件中进行权限注册,让系统知道你需要接收播送并给你开放ROOT允许你使用才行。下面代码为本应用所有的权限注册代码:123456789101112131415<uses-permissionandroid:name=CESS_COARSE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><uses-permissionandroid:name="android.permission.READ_SMS"/><uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permissionandroid:name="android.permission.RECEIVE_SMS"/><uses-permissionandroid:name="android.permission.SEND_SMS"/><uses-permissionandroid:name="android.permission.WRITE_SMS"/><uses-permissionandroid:name="android.permission.READ_LOGS"/><uses-permissionandroid:name=ission.READ_CONTACTS"/>在本软件中远程控制就是通过此短信播送接收机制实现的。当系统收到短信后会向需要接收播送的应用发送短信播送,本应用接收播送后就可根据短信内容做出相应的动作了。其效劳程序流程图如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s111SMS效劳流程图短信接收后台效劳关键代码解析如下:1234567891011121314151617181920//创立SMSReceivedBroadcastReceiver类继承BroadcastReceiver类实现接收短信播送publicclassSMSReceivedBroadcastReceiverextendsBroadcastReceiver{//覆写父类onReceive方法执行动作 publicvoidonReceive(Contextcontext,Intentintent){// 检测防盗保护是否开启 if(isprotect){//通过msgs[i].getDisplayOriginatingAddress()方法得到来源短信号码//比照是否为平安号 if(oriAddress.trim().equals("+86"+safenumber)){} elseif(oriAddress.trim().equals("12520"+safenumber)){} elseif(oriAddress.trim().equals(safenumber)){} // 1.执行GPS定位 if(body.contains("dingwei#"+password)){}// 2.执行锁定 elseif(body.contains("suoding#"+password)){}// 3.执行发报警音 elseif(body.contains("baojing#"+password)){}// 4.执行销毁数据 elseif(body.contains("xiaohui#"+password)){}}换卡短信通知本应用在开机完成后首先接收系统发出的开机完成播送,这时软件就会在后台开始检测SIM卡的IMSI码信息,如果此信息与原保存的IMSI码不一致,那么说明处于非平安状态。待检测到信号,可执行移动效劳的时候,效劳状态播送就会向所有应用发送此播送。当本应用接收到此播送后就会立即向平安号发送SIM卡被更换的报告。其效劳效果如下图。图STYLEREF1\s4.SEQ图\*ARABIC\s112开机检测SIM卡信息流程图开机检测SIM卡程序主要代码分析如下:1234567891011121314151617181920//创立一个用于开机接收播送的类BootCompleteReceiverpublicclassBootCompleteReceiverextendsBroad

温馨提示

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

评论

0/150

提交评论