版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章緒論1.1研究背景如今,隨著信息化社會(huì)的飛速發(fā)展,手機(jī)已經(jīng)成為了人們生活中必不可少的一部分,它為人們提供了眾多功能,包括大家的日常通話,購物,聊天等。但除了這些基本的功能,它還可以為我們提供更多的服務(wù)。由于以前存在各方面的原因,比如網(wǎng)絡(luò)不普及、群眾難以接受、開發(fā)技術(shù)不夠成熟等,手機(jī)定位系統(tǒng)在中國的發(fā)展速度收到了影響。進(jìn)入二十一世紀(jì)以后,我國經(jīng)濟(jì)有了飛速發(fā)展,開發(fā)中的難題也被一一解決,各大通信公司都加入到了利用手機(jī)定位的隊(duì)列中。在所用使用定位技術(shù)的應(yīng)用中,手機(jī)地圖是一種以定位技術(shù)為核心的應(yīng)用,已經(jīng)成為移動(dòng)互聯(lián)網(wǎng)快速發(fā)展下的一個(gè)重要工具[1],隨著其功能的不斷完善,手機(jī)地圖的用戶數(shù)量也在穩(wěn)步增長。手機(jī)地圖的用戶規(guī)模因?yàn)槠涔δ艿牟粩嗤晟埔恢北3制椒€(wěn)增長。而如今,人們對(duì)老人與兒童的安全問題越來越重視,但現(xiàn)在的地圖軟件都有一定的弊端,定位不準(zhǔn)確,功能不夠全面,或者帶有太多廣告影響使用體驗(yàn)。因此設(shè)計(jì)并實(shí)現(xiàn)一款基于Android操作系統(tǒng)的老人定位跟蹤、防走丟的應(yīng)用軟件是擁有一些特殊意義的。1.2國內(nèi)外研究現(xiàn)狀位置服務(wù)(LocationBasedService,LBS)也稱為基于位置的服務(wù),是指使用移動(dòng)設(shè)備,如手機(jī)、平板電腦或其他移動(dòng)設(shè)備,利用網(wǎng)絡(luò)或全球定位系統(tǒng)獲取并向用戶提供準(zhǔn)確的位置信息,實(shí)現(xiàn)各種與定位相關(guān)的業(yè)務(wù)[2],其核心是定位。國外移動(dòng)位置服務(wù)最早在美國產(chǎn)生,是因?yàn)橐粋€(gè)無法被定位的女孩慘遭殺害而構(gòu)建來應(yīng)對(duì)緊急救援,因此強(qiáng)制性構(gòu)建了一個(gè)公眾的安全服務(wù)網(wǎng)絡(luò);二十世紀(jì)初,歐洲國家實(shí)施了市場(chǎng)導(dǎo)向的定位服務(wù),但歐洲國家不是強(qiáng)制性的,他們讓商家自行選擇他們的定位技術(shù)和實(shí)施時(shí)間;日本和韓國基于3G技術(shù)的發(fā)展,LBS的商業(yè)應(yīng)用比美國和歐洲還要領(lǐng)先,有著名的運(yùn)營商,如NTTDoCoMo等。在中國,第一個(gè)移動(dòng)定位服務(wù)于2002年11月首次推出,移動(dòng)夢(mèng)網(wǎng)推出了“我在哪里”、“你在哪里”、“找朋友”等應(yīng)用[3],中國電信和網(wǎng)通也推出了基于基站定位的定位服務(wù),因?yàn)樗麄兛吹搅硕ㄎ环?wù)的發(fā)展前景。如今,大多數(shù)應(yīng)用程序都用到了定位技術(shù),比如手機(jī)QQ、微信等最流行的應(yīng)用程序。近年來隨著4G技術(shù)和互聯(lián)網(wǎng)地圖的發(fā)展,越來越多的軟件開發(fā)商看到了定位服務(wù)研究的拓展與地圖應(yīng)用的二次開發(fā)前景,紛紛加入這一行列,手機(jī)等移動(dòng)設(shè)備的定位系統(tǒng)得到了越來越廣泛的運(yùn)用。1.3需求分析1.3.1功能分析本課題致力于基于Android平臺(tái)的老年人手機(jī)定位系統(tǒng)的研究,經(jīng)過設(shè)計(jì)后,該系統(tǒng)的功能主要包括:1.用戶注冊(cè)、登陸功能。2.實(shí)時(shí)位置共享;3.遠(yuǎn)程開啟對(duì)方手機(jī)網(wǎng)絡(luò)進(jìn)行定位;4.遠(yuǎn)離報(bào)警;5.軌跡記錄。1.3.2技術(shù)可行性分析老人定位軟件主要采用Android、java、百度地圖技術(shù),基于B/S結(jié)構(gòu),Mysql數(shù)據(jù)庫,對(duì)于應(yīng)用程序的開發(fā)要求具備完整功能,使用簡單的特點(diǎn),并建立一個(gè)數(shù)據(jù)完整安全穩(wěn)定的數(shù)據(jù)庫。定位軟件的開發(fā)技術(shù)具有很高可行性,百度地圖AndroidSDK使用十分方便,且開發(fā)人員掌握了一定的開發(fā)技術(shù),所以系統(tǒng)的開發(fā)具有可行性。1.3.3操作可行性分析老人定位軟件的登錄界面簡單并且容易操作。用戶登錄界面分為兩種,成人界面登陸后可以十分方便的綁定老人賬號(hào)并實(shí)時(shí)查看老人位置:老人界面登錄后直接打開網(wǎng)絡(luò)進(jìn)行定位,無需老人進(jìn)行其他操作。并系統(tǒng)采用Android技術(shù)開發(fā),基于B/S結(jié)構(gòu),這些開發(fā)環(huán)境使系統(tǒng)更加完善。本系統(tǒng)具有操作簡單、層次分明、使用方便的特點(diǎn),因此本系統(tǒng)的開發(fā)是十分合理的。1.3.4經(jīng)濟(jì)可行性分析老人定位軟件是基于Android、java、百度地圖技術(shù),采用Mysql數(shù)據(jù)庫儲(chǔ)存數(shù)據(jù),所要求的硬件和軟件環(huán)境并不復(fù)雜,作為學(xué)生很容易達(dá)成。程序開發(fā)主要是在電腦上進(jìn)行的代碼的編寫與修改,所以程序開發(fā)在人力、財(cái)力上要求都沒有太高的要求,而且此系統(tǒng)不是很復(fù)雜,開發(fā)周期短,經(jīng)濟(jì)方面具有較高的可行性。1.3.5法律可行性分析此老人定位軟件是自己全程獨(dú)立設(shè)計(jì)的安卓系統(tǒng),無論是軟件編寫還是數(shù)據(jù)庫,使用的都是開源代碼,所以這個(gè)系統(tǒng)的開發(fā)和設(shè)計(jì),沒有侵權(quán)等問題,在法律上完全可行。綜上所述,這款老人定位軟件在技術(shù)、操作、經(jīng)濟(jì)和法律上都具有不錯(cuò)的可行性,且功能較為全面,開發(fā)此程序是可行的。1.4進(jìn)度安排時(shí)間工作內(nèi)容第七學(xué)期第13周確定選題,查閱文獻(xiàn)第七學(xué)期第14-17周撰寫開題報(bào)告,外文文獻(xiàn)翻譯第七學(xué)期第18-19周資料準(zhǔn)備、進(jìn)行開題答辯第八學(xué)期第1-2周調(diào)研、需求分析第八學(xué)期第3-5周系統(tǒng)設(shè)計(jì)、測(cè)試第八學(xué)期第6-8周完善系統(tǒng),撰寫論文初稿第八學(xué)期第9-10周修改論文第八學(xué)期第11周論文定稿頓,答辯資格審查第八學(xué)期第12周畢業(yè)答辯準(zhǔn)備、答辯1.5本文的結(jié)構(gòu)安排本文共分六章來完成,下面來介紹各章節(jié)在本文要完成的內(nèi)容:第一章緒論。本章首先介紹了本課題的研究背景和意義;然后分析了國內(nèi)外位置服務(wù)的現(xiàn)狀并對(duì)本文的主要工作進(jìn)行了安排。第二章系統(tǒng)開發(fā)環(huán)境與相關(guān)技術(shù)。本章首先分析了幾種流行的智能手機(jī)操作系統(tǒng);介紹了Android平臺(tái)和Android技術(shù)以及sqlite數(shù)據(jù)庫,最后對(duì)百度地圖定位技術(shù)和應(yīng)用進(jìn)行了分析。第三章系統(tǒng)總體設(shè)計(jì)與分析。本章在類似論文和各種優(yōu)秀地圖服務(wù)軟件的基礎(chǔ)上,描述了系統(tǒng)的總體框架;確定了基于Android手機(jī)老人定位系統(tǒng)的系統(tǒng)需求和功能模塊;接著討論了定位系統(tǒng)架構(gòu)圖以及系統(tǒng)數(shù)據(jù)庫的設(shè)計(jì);最后講述了開發(fā)環(huán)境的配置。第四章系統(tǒng)各功能模塊的實(shí)現(xiàn)。本章是介紹了登錄注冊(cè)、綁定老人用戶、老人定位、監(jiān)控老人等各功能模塊的實(shí)現(xiàn)方法。第五章系統(tǒng)測(cè)試。本章是對(duì)第四章所描述的各個(gè)功能的測(cè)試,并給出測(cè)試過程及結(jié)果。第六章總結(jié)與展望。本章是針對(duì)老人定位系統(tǒng)的開發(fā)與設(shè)計(jì)進(jìn)行總結(jié),并對(duì)本系統(tǒng)的優(yōu)缺點(diǎn)進(jìn)行了總結(jié),最后對(duì)本系統(tǒng)以后的要做的工作進(jìn)行了一些展望。第二章相關(guān)技術(shù)介紹2.1Android平臺(tái)Android最初的意思是“機(jī)器人”,也是Google在2007年11月5日宣布的基于Linux的開源移動(dòng)操作系統(tǒng)的名字,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,Google自稱是第一個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件[4]。Android是一個(gè)基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),最初由Google開發(fā)(在中國商標(biāo)名為“安卓”),后來又由開放手機(jī)聯(lián)盟開發(fā)。它采用了軟件堆棧體系結(jié)構(gòu),主要分為三部分。底層是基于Linux內(nèi)核的,只提供基本功能;其他的應(yīng)用程序由公司自己開發(fā),使用Java作為編程的一部分[5]。此外,Google還與其它數(shù)十家其他移動(dòng)公司結(jié)成了開放手機(jī)聯(lián)盟,以推廣這項(xiàng)技術(shù)。Android在發(fā)布之前經(jīng)常被謠傳是谷歌手機(jī)或gPhone。大多數(shù)傳言是谷歌正在開發(fā)自己的移動(dòng)電話產(chǎn)品,而不是軟件平臺(tái)。2010年1月,Google開始發(fā)布自家品牌手機(jī)電話的NexusOne[12]。2.2Android技術(shù)介紹Android是一種基于Linux的開源操作系統(tǒng),主要用于便攜設(shè)備。目前中國大陸沒有有統(tǒng)一的名稱,更多的人使用“安卓”或“安致”來稱呼這個(gè)系統(tǒng)。Android操作系統(tǒng)最初是由AndyRubin開發(fā)的,主要用于手機(jī),2005年Google收購了它并成立開放手機(jī)聯(lián)盟來開發(fā)改進(jìn)產(chǎn)品,并逐漸擴(kuò)展到平板電腦和其他領(lǐng)域。Android的主要競(jìng)爭(zhēng)對(duì)手是蘋果公司的ios和微軟的的WindowsPhoneOS。2011年第一季度,Android在全球市場(chǎng)份額上首次超過塞班系統(tǒng),成為世界上最大的操作系統(tǒng)。2012年2月,Android占據(jù)全球智能手機(jī)操作系統(tǒng)市場(chǎng)的52.5%的份額,在中國占據(jù)了68.4%的市場(chǎng)份額[6]。Android的系統(tǒng)架構(gòu)像其它操作系統(tǒng)一樣,是分層的。android分為四個(gè)層次,從高到低分別為應(yīng)用層、框架層、系統(tǒng)運(yùn)行庫層和linux核心層。Android是一個(gè)基于Linux的開放式手機(jī)操作平臺(tái)。隨著Android的快速發(fā)展,開發(fā)者現(xiàn)在已經(jīng)可以使用多種編程語言來開發(fā)Android應(yīng)用程序,而不是局限于只能使用Java語言。它已經(jīng)被許多開發(fā)者視為一個(gè)真正意義上的開放操作系統(tǒng)[7]。2.3sqlite數(shù)據(jù)庫介紹JDBC的驅(qū)動(dòng)程序它不同于數(shù)據(jù)庫,在每個(gè)數(shù)據(jù)庫的應(yīng)用程序中都是獨(dú)立的,當(dāng)運(yùn)行到一定的程序當(dāng)中,它就會(huì)與自己相關(guān)的協(xié)議與客戶端進(jìn)行通訊。然后這個(gè)系統(tǒng)就會(huì)把這些數(shù)據(jù)進(jìn)行連接。當(dāng)我們選擇哪座橋時(shí),接下來將簡單描述這個(gè)數(shù)據(jù)庫是如何創(chuàng)建的。當(dāng)點(diǎn)擊完成按鈕時(shí)就自動(dòng)在對(duì)話框內(nèi)彈出數(shù)據(jù)源的名稱,在進(jìn)行點(diǎn)擊下一步即可,直接在輸入相對(duì)應(yīng)的身份驗(yàn)證和登錄密碼[8]。Sqlite是一個(gè)面向用戶的數(shù)據(jù)庫應(yīng)用程序,具有易于學(xué)習(xí)、結(jié)構(gòu)簡單、功能強(qiáng)大、信息存儲(chǔ)量大的優(yōu)點(diǎn),sqlite是一個(gè)查詢和編程工具,主要用于數(shù)據(jù)庫,在許多數(shù)據(jù)庫關(guān)系中使用,能夠?qū)V泛的數(shù)據(jù)進(jìn)行廣泛的查詢和應(yīng)用程序,能夠?qū)ΤR?guī)數(shù)據(jù)進(jìn)行廣泛的查詢,不需要存儲(chǔ)和掌握大量的數(shù)據(jù),也不需要對(duì)它們進(jìn)行多級(jí)組合。主要操作是記錄相應(yīng)的收集,在使用靈活性強(qiáng)和功能強(qiáng)的sqlite數(shù)據(jù)庫的情況下,在實(shí)現(xiàn)其他功能時(shí)需要進(jìn)行編寫代碼,因此,在使用sqlite數(shù)據(jù)庫時(shí)只需編寫一小段就可以對(duì)該功能實(shí)現(xiàn)[11]。本系統(tǒng)的開發(fā)主要應(yīng)用了sqlite進(jìn)行對(duì)數(shù)據(jù)的管理。(1)數(shù)據(jù)數(shù)據(jù)它是一個(gè)存儲(chǔ)在數(shù)據(jù)庫中的對(duì)象,在大多數(shù)人的頭腦中,它是數(shù)字。事實(shí)上,一個(gè)簡單的數(shù)字就是一個(gè)簡單的數(shù)據(jù),從廣義的角度來看,一些文字、數(shù)據(jù)、圖形等都可以被看作是一種數(shù)據(jù),這樣數(shù)據(jù)就可以被定義了。(2)數(shù)據(jù)庫數(shù)據(jù)庫字面來看,它就是存儲(chǔ)數(shù)據(jù)的倉庫,只不過它在計(jì)算機(jī)上是以另一種格式進(jìn)行存放。數(shù)據(jù)庫經(jīng)過長時(shí)間在計(jì)算機(jī)中儲(chǔ)存,更多的是在內(nèi)部組織模型數(shù)據(jù),因此具有較高的數(shù)據(jù)獨(dú)立性和共享性。(3)數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫的管理系統(tǒng)主要功能表主要如下:1.在數(shù)據(jù)上它可以由數(shù)據(jù)對(duì)象定義。2.數(shù)據(jù)庫語言它可以提供數(shù)據(jù)操作,用戶可以通過語言操作來進(jìn)行一些刪除、查詢和修改等動(dòng)作。3.通過建立數(shù)據(jù)庫它可以創(chuàng)建數(shù)據(jù)庫的輸入和轉(zhuǎn)換功能,可以對(duì)數(shù)據(jù)庫進(jìn)行重組監(jiān)控,也可以幫助數(shù)據(jù)庫進(jìn)行恢復(fù)功能[9]。2.4百度地圖AndroidSDK百度地圖AndroidSDK是移動(dòng)設(shè)備中系統(tǒng)基于Android2.1及以上版本的應(yīng)用程序接口,在二次開發(fā)中,開發(fā)者可以通過該接口實(shí)現(xiàn)多種位置服務(wù)功能:基本地圖:提供地圖的顯示,并且可以進(jìn)行縮小、移動(dòng)、改變視角等操作;POI檢索:用戶可以輸入關(guān)鍵字,在所選擇的城市中對(duì)數(shù)據(jù)進(jìn)行檢索;地理編碼:用戶可以提供地理坐標(biāo)查詢?cè)摰乩碜鴺?biāo)的準(zhǔn)確地址,反之也可以;線路規(guī)劃:用戶可以輸入起點(diǎn)和終點(diǎn),對(duì)出行各種交通工具線路進(jìn)行檢索;定位:采用多種定位技術(shù),保證用戶隨時(shí)能獲取自己的位置信息并在地圖中顯示出來;離線地圖:可以在下載好地圖之后在沒有網(wǎng)絡(luò)的情況下進(jìn)行瀏覽地圖;周邊雷達(dá):開發(fā)者可以在應(yīng)用程序中快速查找周邊使用相同應(yīng)用程序的用戶數(shù)量以及位置;特色功能:該功能提供了短串分享、Place詳情檢索、熱力圖等特色功能[10]。第三章總體設(shè)計(jì)3.1系統(tǒng)的總體框架用戶打開并進(jìn)入系統(tǒng)后,會(huì)先顯示登錄界面,選擇成人或老人模式,輸入正確的用戶名和密碼,系統(tǒng)自動(dòng)檢測(cè)信息,若信息無誤,則用戶會(huì)進(jìn)入對(duì)應(yīng)的系統(tǒng)功能界面,進(jìn)行操作,否則會(huì)提示密碼錯(cuò)誤無法登錄,操作流程如圖3-1所示。開始開始輸入用戶名、密碼等信息輸入用戶名、密碼等信息選擇權(quán)限選擇權(quán)限N提示密碼錯(cuò)誤用戶名密碼是否正確N提示密碼錯(cuò)誤用戶名密碼是否正確YY登錄成功登錄成功結(jié)束結(jié)束圖3-1登錄流程圖用戶登錄系統(tǒng)后,根據(jù)成人或老人不同的權(quán)限,將獲得不同的功能。老人系統(tǒng)將自動(dòng)打開網(wǎng)絡(luò)進(jìn)行定位,并將相關(guān)數(shù)據(jù)傳輸?shù)匠扇讼到y(tǒng)中;成人系統(tǒng)將會(huì)獲取綁定的老人的位置以及近期移動(dòng)軌跡等信息。如圖3-2所示。開始開始選擇成人或老人系統(tǒng)選擇成人或老人系統(tǒng)NYNY進(jìn)入成人系統(tǒng)進(jìn)入老人系統(tǒng)進(jìn)入成人系統(tǒng)進(jìn)入老人系統(tǒng)自動(dòng)開啟網(wǎng)絡(luò)自動(dòng)開啟網(wǎng)絡(luò)遠(yuǎn)離報(bào)警獲取老人或兒童軌跡記錄獲取老人或兒童位置信息遠(yuǎn)離報(bào)警獲取老人或兒童軌跡記錄獲取老人或兒童位置信息實(shí)時(shí)網(wǎng)絡(luò)定位實(shí)時(shí)網(wǎng)絡(luò)定位結(jié)束結(jié)束圖3-2系統(tǒng)流程圖3.2系統(tǒng)的模塊劃分根據(jù)系統(tǒng)功能分析,本系統(tǒng)設(shè)計(jì)了五個(gè)功能模塊,分別為用戶注冊(cè)登陸、實(shí)時(shí)位置共享、遠(yuǎn)程開啟對(duì)方手機(jī)網(wǎng)絡(luò)進(jìn)行定位、遠(yuǎn)離報(bào)警、軌跡記錄。如圖3-3所示。老人手機(jī)定位老人手機(jī)定位用戶注冊(cè)登用戶注冊(cè)登錄開啟手機(jī)網(wǎng)絡(luò)軌跡記錄遠(yuǎn)離報(bào)警實(shí)時(shí)位置共享圖3-3系統(tǒng)功能模塊圖各功能的說明如下:(1)用戶注冊(cè)登陸:在本功能模塊,用戶可以通過注冊(cè)擁有自己的私人賬號(hào),并登陸對(duì)其他功能進(jìn)行操作。(2)實(shí)時(shí)位置共享:在本功能模塊,用戶可以隨時(shí)獲得老人或兒童的實(shí)時(shí)位置信息。(3)遠(yuǎn)程開啟對(duì)方手機(jī)網(wǎng)絡(luò)進(jìn)行定位:在本功能模塊,老人或兒童的手機(jī)在打開此系統(tǒng)時(shí),將自動(dòng)連接網(wǎng)絡(luò)進(jìn)行定位。(4)遠(yuǎn)離報(bào)警:在本功能模塊,用戶可以在老人或兒童遠(yuǎn)離住宅安全范圍時(shí)獲得警報(bào)提示,及時(shí)了解情況并處理,以此來保障老人或兒童的安全。(5)軌跡記錄:在本功能模塊,用戶可以獲得最近老人或兒童的行動(dòng)軌跡,了解其最近的行動(dòng)。3.3系統(tǒng)架構(gòu)根據(jù)系統(tǒng)需求分析,本系統(tǒng)采用Android操作系統(tǒng)和百度地圖API開發(fā),定位技術(shù)使用A-GPS和WIFI定位技術(shù),保證定位的準(zhǔn)確和快速。用戶可以通過網(wǎng)絡(luò)連接到百度地圖服務(wù)器來接入服務(wù),從而實(shí)現(xiàn)手機(jī)定位系統(tǒng)。系統(tǒng)的架構(gòu)圖如圖3-4。圖3-4定位系統(tǒng)架構(gòu)圖3.4數(shù)據(jù)庫的設(shè)計(jì)基于對(duì)系統(tǒng)的分析,部分?jǐn)?shù)據(jù)庫表如下:1.用戶資料表,用于儲(chǔ)存用戶的賬戶資料,如圖表3-1所示。表3-1m_user用戶信息表字段名稱字段意義字段類型字段長度鍵碼能否為空id主鍵編號(hào)varchar50主鍵否name賬號(hào)varchar40否type類型varchar50外鍵否password密碼varchar40否phone電話varchar40否Location(位置信息表),用于儲(chǔ)存用戶的位置資料,如表3-2所示。表3-2Location表結(jié)構(gòu)字段名稱字段類型是否為空說明nameString否位置共享名稱dateString是位置共享時(shí)間latitudeDouble否緯度坐標(biāo)longitudeDouble否經(jīng)度坐標(biāo)3.5開發(fā)環(huán)境的配置本系統(tǒng)是在Windows10下完成的,目前Android平臺(tái)下的采用的開發(fā)工具主要是Eclipse和AndroidStudio。比較兩者后,本系統(tǒng)開發(fā)決定所用到的軟件是AndroidStudio3.6.3、JDK1.8以及AndroidSDKRevision19。第四章系統(tǒng)功能模塊的實(shí)現(xiàn)4.1登錄、注冊(cè)模塊的實(shí)現(xiàn)使用者輸入用戶名、密碼、手機(jī)號(hào)注冊(cè)獲得賬戶,使用此賬戶登錄便可以操作系統(tǒng)。如果注冊(cè)的賬號(hào)已經(jīng)存在,就會(huì)注冊(cè)失敗,系統(tǒng)提示“該用戶已存在”;如果使用者注冊(cè)成功,系統(tǒng)就會(huì)提示“注冊(cè)成功”。如圖4-1所示。代碼如下:tringname=acet_1.getText().toString();
Stringpwd=acet_2.getText().toString();
Stringphone=acet_3.getText().toString();
if(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd)||TextUtils.isEmpty(phone)){
ToastUtils.showToast(RegestActivity.this,"請(qǐng)?zhí)顚懲暾畔?);
}else{
UserInfouserInfo=userInfoDao.queryBuilder().where(UserInfoDao.Properties.Name.eq(name)).build().unique();
if(userInfo!=null){
ToastUtils.showToast(RegestActivity.this,"該用戶已存在");
}else{
UserInfouserInfo1=newUserInfo();
userInfo1.setName(name);
userInfo1.setPwd(pwd);
userInfo1.setUserName(phone);
userInfoDao.insert(userInfo1);
ToastUtils.showToast(RegestActivity.this,"注冊(cè)成功");
RegestActivity.this.finish();
}
}
}
});圖4-1注冊(cè)界面圖4-2登錄界面用戶輸入已經(jīng)注冊(cè)過的用戶名和密碼,系統(tǒng)將會(huì)自動(dòng)檢測(cè),如果賬號(hào)密碼輸入正確,則可以成功進(jìn)入系統(tǒng)進(jìn)行操作;如果賬號(hào)密碼輸入錯(cuò)誤,那么將無法登錄,并且系統(tǒng)提示“賬號(hào)密碼錯(cuò)誤”。如圖4-2所示。代碼如下:title=findViewById(R.id.title);
title.setSubmitListener(newTitleWidget.onSubmitListener(){
@Override
publicvoidonSubmit(ViewparamView){
Intentintent=newIntent(LoginActivity.this,RegestActivity.class);
startActivity(intent);
}
});
findViewById(R.id.tv_11).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
startActivity(newIntent(LoginActivity.this,LorenLoginActivity.class));
}
});
acet_1=findViewById(R.id.acet_1);
acet_2=findViewById(R.id.acet_2);
acbtn_click=findViewById(R.id.acbtn_click);
acbtn_click.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Stringname=acet_1.getText().toString();
Stringpwd=acet_2.getText().toString();
UserInfouserInfo=userInfoDao.queryBuilder().where(UserInfoDao.Properties.Name.eq(name),UserInfoDao.Properties.Pwd.eq(pwd)).build().unique();
if(userInfo!=null){
User.setUserName(userInfo.getName(),LoginActivity.this);
User.setUserPhone(userInfo.getUserName(),LoginActivity.this);
Intentintent=newIntent(LoginActivity.this,HomeMainActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}else{
ToastUtils.showToast(LoginActivity.this,"賬號(hào)密碼錯(cuò)誤");
}
}
});用戶選擇“我是老人”選項(xiàng),進(jìn)入老人模式,輸入成人綁定的老人的用戶名與密碼,系統(tǒng)自動(dòng)檢測(cè),如果賬號(hào)密碼正確,則進(jìn)入老人操作系統(tǒng);如果賬號(hào)密碼錯(cuò)誤,則無法登錄并提示“賬號(hào)密碼錯(cuò)誤”。如圖4-3所示。代碼如下:title=findViewById(R.id.title);
title.setSubmitListener(newTitleWidget.onSubmitListener(){
@Override
publicvoidonSubmit(ViewparamView){
Intentintent=newIntent(LoginActivity.this,RegestActivity.class);
startActivity(intent);
}
});
findViewById(R.id.tv_11).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
startActivity(newIntent(LoginActivity.this,LorenLoginActivity.class));
}
});
acet_1=findViewById(R.id.acet_1);
acet_2=findViewById(R.id.acet_2);
acbtn_click=findViewById(R.id.acbtn_click);
acbtn_click.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Stringname=acet_1.getText().toString();
Stringpwd=acet_2.getText().toString();
UserInfouserInfo=userInfoDao.queryBuilder().where(UserInfoDao.Properties.Name.eq(name),UserInfoDao.Properties.Pwd.eq(pwd)).build().unique();
if(userInfo!=null){
User.setUserName(userInfo.getName(),LoginActivity.this);
User.setUserPhone(userInfo.getUserName(),LoginActivity.this);
Intentintent=newIntent(LoginActivity.this,HomeMainActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}else{
ToastUtils.showToast(LoginActivity.this,"賬號(hào)密碼錯(cuò)誤");
}
}
});圖4-3老人登錄界面圖4-2修改密碼界面用戶選擇“修改密碼”選項(xiàng),輸入原密碼、新密碼并確認(rèn)新密碼,系統(tǒng)自動(dòng)檢測(cè),如果兩次新密碼輸入一致,則系統(tǒng)提示修改成功;如果兩次新密碼不一致,則修改失敗,系統(tǒng)提示“兩次密碼輸入不一致”。如圖4-4。代碼如下:userInfoDao=TheApplication.instance.getDaoSession().getUserInfoDao();
acet_name=findViewById(R.id.acet_name);
acet_desc=findViewById(R.id.acet_desc);
acet_time=findViewById(R.id.acet_time);
title=findViewById(R.id.title);
title.setSubmitListener(newTitleWidget.onSubmitListener(){
@Override
publicvoidonSubmit(ViewparamView){
if(!acet_desc.getText().toString().trim().equals(acet_time.getText().toString().trim())){
Toast.makeText(ChangePasswordActivity.this,"兩次密碼輸入不一致",Toast.LENGTH_SHORT).show();
return;
}
UserInfouserInfo=newUserInfo();
userInfo.setName(User.getUserName(ChangePasswordActivity.this));
UserInfouserInfo1=userInfoDao.queryBuilder().where(UserInfoDao.Properties.Name.eq(User.getUserName(ChangePasswordActivity.this))
,UserInfoDao.Properties.Pwd.eq(acet_name.getText().toString().trim())).build().unique();
if(userInfo1!=null){
userInfo1.setPwd(acet_desc.getText().toString().trim());
userInfoDao.update(userInfo1);
Toast.makeText(ChangePasswordActivity.this,"修改成功",Toast.LENGTH_SHORT).show();
}
finish();
}
});4.2綁定老人用戶模塊的實(shí)現(xiàn)用戶點(diǎn)擊“添加老人”,輸入姓名、描述、添加人年齡、密碼,即可綁定老人用戶,并在登錄界面登錄老人客戶端進(jìn)行操作。如圖4-5。代碼如下:jiHuaBeanDao=TheApplication.instance.getDaoSession().getJiHuaBeanDao();
rv=view.findViewById(R.id.rv);
rv.setLayoutManager(newLinearLayoutManager(mactivity));
adapter=newCommonAdapter<JiHuaBean>(mactivity,R.layout.item_jihua,list){
@Override
protectedvoidconvert(ViewHolderholder,finalJiHuaBeanjiHuaBean,intposition){
holder.setText(R.id.actv_name,"姓名:"+jiHuaBean.getName())
.setText(R.id.actv_miaoshu,"描述:"+jiHuaBean.getDesc())
.setText(R.id.actv_time,"年齡:"+jiHuaBean.getTime());
holder.setOnClickListener(R.id.actv_jilu,newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
startActivity(newIntent(mactivity,JiLuActivity.class)
.putExtra("userName",jiHuaBean.getBeizhu())
.putExtra("longitude",longitude)
.putExtra("latitude",latitude)
);
}
});
}
};
tv_title=view.findViewById(R.id.title);
tv_title.setSubmitListener(newTitleWidget.onSubmitListener(){
@Override
publicvoidonSubmit(ViewparamView){
startActivity(newIntent(mactivity,AddJiHuaActivity.class));
}
});
rv.setAdapter(adapter);
adapter.setOnItemClickListener(newMultiItemTypeAdapter.OnItemClickListener(){
@Override
publicvoidonItemClick(Viewview,RecyclerView.ViewHolderholder,intposition){
startActivity(newIntent(mactivity,JiHuaDetailActivity.class)
.putExtra("datajson",adapter.getDatas().get(position).getBeizhu())
);
}
@Override
publicbooleanonItemLongClick(Viewview,RecyclerView.ViewHolderholder,intposition){
returnfalse;
}
});
getData();
}
publicvoidgetData(){
if(jiHuaBeanDao!=null){
List<JiHuaBean>list1=jiHuaBeanDao.loadAll();
if(list!=null&&adapter!=null){
list.clear();
list.addAll(list1);
adapter.setDatas(list);
}
}
}
}圖4-5綁定老人用戶界面用戶選擇“刪除”選項(xiàng),即可刪除綁定的老人用戶名與密碼。如圖4-6。代碼如下:FinalJiHuaBeanjiHuaBean=jiHuaBeanDao.queryBuilder().where(JiHuaBeanDao.Properties.Beizhu.eq(datajson)).build().unique();
acet_name=findViewById(R.id.acet_name);
acet_time=findViewById(R.id.acet_time);
acet_desc=findViewById(R.id.acet_desc);
acet_name.setText(jiHuaBean.getName());
acet_time.setText(jiHuaBean.getTime());
acet_desc.setText(jiHuaBean.getDesc());
title=findViewById(R.id.title);
title.setSubmitListener(newTitleWidget.onSubmitListener(){
@Override
publicvoidonSubmit(ViewparamView){
jiHuaBeanDao.delete(jiHuaBean);
Toast.makeText(JiHuaDetailActivity.this,"刪除成功",Toast.LENGTH_SHORT).show();
finish();
}
});
}
publicvoidcreateAlarm(Stringmessage,inthour,intminutes){
Intentintent=newIntent(AlarmClock.ACTION_SET_ALARM)
.putExtra(AlarmClock.EXTRA_MESSAGE,message)
.putExtra(AlarmClock.EXTRA_HOUR,hour)
.putExtra(AlarmClock.EXTRA_MINUTES,minutes);
if(intent.resolveActivity(getPackageManager())!=null){
startActivity(intent);
}
}圖4-6刪除界面4.3定位與檢測(cè)模塊的實(shí)現(xiàn)用戶點(diǎn)擊“查看記錄”,便可以查看所綁定的老人或兒童的實(shí)時(shí)定位,并且可以查看老人或兒童最近的行動(dòng)軌跡以及距離監(jiān)控者的距離等信息。如圖4-7。代碼如下:setContentView(R.layout.actiivty_jilu);
locationDao=TheApplication.instance.getDaoSession().getLocationDataDao();
longitude=getIntent().getDoubleExtra("longitude",0);
latitude=getIntent().getDoubleExtra("latitude",0);
userName=getIntent().getStringExtra("userName");
mMapView=findViewById(R.id.mapview);
actv_desc=findViewById(R.id.actv_desc);
title=findViewById(R.id.title);
title.setBackVisibility(View.GONE);
actv_time=findViewById(R.id.actv_time);
actv_juli=findViewById(R.id.actv_juli);
tv_2=findViewById(R.id.tv_2);
tv_3=findViewById(R.id.tv_3);
mBaiduMap=mMapView.getMap();
//設(shè)置是否打開交通圖層
mBaiduMap.setTrafficEnabled(false);
mBaiduMap.setBaiduHeatMapEnabled(false);
mBaiduMap.setMyLocationEnabled(false);
//設(shè)置普通視圖MAP_TYPE_NONEMAP_TYPE_NORMAL
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
mBaiduMap.setBuildingsEnabled(false);
mBaiduMap.showMapPoi(true);
title.setSubmitListener(newTitleWidget.onSubmitListener(){
@Override
publicvoidonSubmit(ViewparamView){
finalCalendarc=Calendar.getInstance();
DatePickerDialogdialog=newDatePickerDialog(JiLuActivity.this,newDatePickerDialog.OnDateSetListener(){
@Override
publicvoidonDateSet(DatePickerview,intyear,intmonthOfYear,intdayOfMonth){
c.set(year,monthOfYear,dayOfMonth);
data=DateFormat.format("yyy-MM-dd",c).toString();
getData();
}
},c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH));
dialog.show();
}
});
}
privatevoidgetData(){
locationDataList=locationDao.queryBuilder().where(locationDataDao.Properties.Name.eq(userName
),locationDataDao.Properties.Time.eq(data)).build().list();
if(locationDataList.size()<1){
actv_desc.setVisibility(View.VISIBLE);
}else{
actv_desc.setVisibility(View.GONE);
for(locationDatalocationData1:locationDataList){
LatLnglatLng1=newLatLng(locationData1.getWd(),locationData1.getJd());
latLngs.add(latLng1);
}
MapStatusUpdateu=MapStatusUpdateFactory.newLatLng(latLngs.get(latLngs.size()/2));
mBaiduMap.setMapStatus(u);
OverlayOptionsooPolyline=newPolylineOptions().width(13).color(0xAAFF0000).points(latLngs);
//在地圖上畫出線條圖層,mPolyline:線條圖層
mPolyline=(Polyline)mBaiduMap.addOverlay(ooPolyline);
mPolyline.setZIndex(3);
mBaiduMap.setMapStatus(MapStatusUpdateFactory
.newMapStatus(newMapStatus.Builder().zoom(17).build()));
if(latLngs.size()>0){
LatLnglatLng1=latLngs.get(0);
LatLnglng=newLatLng(latitude,longitude);
Toast.makeText(this,"目標(biāo)人距離你:"+DistanceUtil.getDistance(latLng1,lng)+"米",Toast.LENGTH_SHORT).show();
}
actv_time.setText("記錄時(shí)間為:"+latLngs.size()*2+"秒");
if(latLngs.size()>0){
LatLnglatLng=latLngs.get(0);
doublemmm=0;
for(inti=0;i<latLngs.size();i++){
mmm+=DistanceUtil.getDistance(latLngs.get(i),latLng);
latLng=latLngs.get(i);
}
DecimalFormatdf=newDecimalFormat("0.00");
Stringstr=df.format((mmm/1000));
actv_juli.setText("行進(jìn)距離為"+str+"公里");
DecimalFormatdf1=newDecimalFormat("0.00");
Stringstr1=df1.format((mmm/(latLngs.size()*2*60)));
tv_2.setText(str1+"米/分");
}
}圖4-7定位界面第五章系統(tǒng)測(cè)試系統(tǒng)開發(fā)完成后的最后一個(gè)步驟就是系統(tǒng)測(cè)試,系統(tǒng)測(cè)試是完成整個(gè)系統(tǒng)十分重要的一個(gè)環(huán)節(jié),測(cè)試的好壞關(guān)系到產(chǎn)品的發(fā)展。客戶對(duì)軟件的質(zhì)量、性能和可靠性等需求就要通過測(cè)試來實(shí)現(xiàn)。測(cè)試過程要必須遵循嚴(yán)謹(jǐn)性、完善性、規(guī)范性的原則,測(cè)試的主要目的就是看看在系統(tǒng)運(yùn)行中,是否會(huì)出現(xiàn)bug,然后對(duì)出現(xiàn)的bug進(jìn)行調(diào)試,直到程序完美運(yùn)行。5.1登錄界面的測(cè)試打開定位軟件,點(diǎn)擊“注冊(cè)”按鈕成功注冊(cè)用戶,然后在登錄界面正確輸入用戶名及密碼,點(diǎn)擊“登錄”。經(jīng)過測(cè)試,如圖5-1所示,登錄模塊中文本框輸入正常,在密碼錯(cuò)誤時(shí)會(huì)提示用戶“密碼錯(cuò)誤”;在密碼正確時(shí),成功登錄成人系統(tǒng)。在登陸界面中,點(diǎn)擊“我是老人”選項(xiàng),并輸入在成人用戶面板中綁定的老人用戶名及密碼,點(diǎn)擊“登錄”。經(jīng)過測(cè)試,如圖5-2所示,登錄模塊中文本框輸入正常,在密碼錯(cuò)誤時(shí)會(huì)提示用戶“密碼錯(cuò)誤”;在密碼正確時(shí),成功登陸老人系統(tǒng)。如圖5-2所示。圖5-1成人登陸界面測(cè)試圖5-2老人登陸界面測(cè)試5.2老人用戶定位測(cè)試登錄老人界面,查看系統(tǒng)是否自動(dòng)打開網(wǎng)絡(luò)進(jìn)行定位且定位準(zhǔn)確。經(jīng)過測(cè)試,如圖5-3所示,老人系統(tǒng)成功自動(dòng)打開網(wǎng)絡(luò)進(jìn)行定位,并在當(dāng)前地圖記錄老人所在位置。圖5-3老人定位測(cè)試圖5-4成人監(jiān)控測(cè)試5.3成人監(jiān)控測(cè)試登錄成人用戶界面,點(diǎn)擊“查看記錄”按鈕,查看系統(tǒng)能否監(jiān)測(cè)到老人的位置情況以及近期行動(dòng)軌跡。經(jīng)過測(cè)試,如圖5-4所示,成人系統(tǒng)成功監(jiān)測(cè)到所綁定的老人用戶最近的位置信息,并在界面中顯示老人最近移動(dòng)的時(shí)間、距離以及時(shí)速,方便成人進(jìn)行監(jiān)控。5.4測(cè)試分析經(jīng)過對(duì)上述的測(cè)試結(jié)果分析,本基于安卓的老人定位系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)滿足用戶對(duì)于老人定位的要求和需求。所有基本功能齊全,操作簡單,系統(tǒng)運(yùn)行性能良好,是一個(gè)值得推廣、應(yīng)用的基于安卓的老人定位系統(tǒng)的設(shè)計(jì)。對(duì)本系統(tǒng)的測(cè)試主要從以下幾方面入手:(1)功能測(cè)試:測(cè)試是對(duì)整個(gè)軟件的功能進(jìn)行測(cè)試。功能測(cè)試它是檢測(cè)該系統(tǒng)是能夠在實(shí)際當(dāng)中得到好的應(yīng)用。(2)強(qiáng)度測(cè)試及性能測(cè)試:測(cè)試系統(tǒng)是否可以達(dá)到設(shè)計(jì)者所要求的功能的整個(gè)過程。(3)安全測(cè)試:對(duì)整個(gè)系統(tǒng)在任何環(huán)境下的運(yùn)行是否能達(dá)到安全運(yùn)行。針對(duì)該系統(tǒng)所有數(shù)據(jù)的安全運(yùn)行情況。本次測(cè)試主要對(duì)一下幾項(xiàng)內(nèi)容進(jìn)行了認(rèn)真的測(cè)試。如表5-1所示。5-1系統(tǒng)測(cè)試表測(cè)試內(nèi)容預(yù)期結(jié)果實(shí)際結(jié)果登錄系統(tǒng)是否正常是是地圖是否正常展示是是定位是否正常運(yùn)行是是頁面是否正常跳轉(zhuǎn)是是5.4測(cè)試結(jié)論本次測(cè)試主要針對(duì)老人定位系統(tǒng)的一些主要功能,例如登錄注冊(cè)、老人定位、成人檢測(cè)等。在基本功能上,這個(gè)系統(tǒng)基本實(shí)現(xiàn)了這些要求,但在過程中也展現(xiàn)出了一些問題。一開始,登錄模塊中文本框輸入并不正常以及在老人用戶的登錄上也出現(xiàn)了一些問題,通過對(duì)代碼的調(diào)試與修改,最終使整個(gè)系統(tǒng)的功能完善且系統(tǒng)也能夠正常運(yùn)行。在最終測(cè)試中,登錄系統(tǒng)正常,地圖展示正常,定位正常運(yùn)行且準(zhǔn)確,頁面正常跳轉(zhuǎn)。綜上所述,該老人定位軟件系統(tǒng)能正常運(yùn)行且功能完整。第六章總結(jié)與展望通過對(duì)Android手機(jī)平臺(tái)的老人定位軟件的開發(fā),使我對(duì)Android定位系統(tǒng)的有了一定的了解,對(duì)整個(gè)系統(tǒng)的開發(fā)流程也會(huì)有一個(gè)清晰的認(rèn)識(shí)。本文通過對(duì)Android、java、Mysql數(shù)據(jù)庫以及百度地圖API的簡介,從硬件和軟件兩方面說明了定位軟件的可行性,本
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年《稅務(wù)稽查指南》知識(shí)考試題庫及答案解析
- 廣西壯族自治區(qū)特種設(shè)備檢驗(yàn)研究院2025年下半年公開招聘工作人員備考題庫及完整答案詳解1套
- 玉環(huán)市國有企業(yè)招聘筆試真題2024
- 重慶永川區(qū)事業(yè)單位定向招聘考試真題2024
- 2025年白朗輔警招聘真題及答案
- “夢(mèng)工場(chǎng)”招商銀行大連分行2026寒假實(shí)習(xí)生招聘?jìng)淇己诵念}庫及答案解析
- 2026年石獅市第六實(shí)驗(yàn)小學(xué)招聘編外合同教師筆試重點(diǎn)試題及答案解析
- 2025云南昆明市五華區(qū)人民法院招聘第五批合同制司法輔助人員7人考試核心題庫及答案解析
- 2025廣西北海市社會(huì)保險(xiǎn)經(jīng)辦中心招募就業(yè)見習(xí)生考試核心題庫及答案解析
- 2025 九年級(jí)語文下冊(cè)詩歌煉字煉句賞析課件
- 棉花合伙種植合同協(xié)議書
- 通信基站施工進(jìn)度施工工期保證措施
- 鉆孔樁安全技術(shù)
- 2025年《社區(qū)警務(wù)工作規(guī)范(試行)》復(fù)習(xí)測(cè)試卷附答案
- 2025秋初中數(shù)學(xué)九年級(jí)上冊(cè)(滬科版 安徽專用)上課課件 21.4 第3課時(shí) 用二次函數(shù)解決拋物線形運(yùn)動(dòng)問題
- 2021年12月大學(xué)英語四級(jí)考試真題及答案(第1套)
- JG/T 387-2012環(huán)氧涂層預(yù)應(yīng)力鋼絞線
- 注塑模具備用件管理制度
- 2024年南昌大學(xué)第二附屬醫(yī)院招聘筆試真題
- 工業(yè)機(jī)械之光
- 清華大學(xué)《工程倫理》網(wǎng)課習(xí)題及期末考試答案
評(píng)論
0/150
提交評(píng)論