




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于藍(lán)牙技術(shù)的考勤系統(tǒng)-藍(lán)牙通信設(shè)計(jì)摘要作為當(dāng)代大學(xué)生,上課的時(shí)候都避免不了老師的考勤,現(xiàn)在的考勤還是主要以老師點(diǎn)名為主。往往點(diǎn)完名后就已經(jīng)占了課堂的小一部分時(shí)間,不僅僅低效,而且考勤很多同學(xué)可以幫別人頂替,所以漏洞很大。而在企業(yè)中,考勤主要是以指紋和掃描臉部為主,這樣的考勤成本高,也浪費(fèi)一定的社會(huì)資源,不利于推廣。基于信息化的藍(lán)牙考勤系統(tǒng)就應(yīng)運(yùn)而生,適應(yīng)時(shí)代的發(fā)展。當(dāng)一推出這藍(lán)牙考勤方式時(shí),就十分受高校的歡迎,畢竟能使上課時(shí)間多了很多也高效很多。遏制住學(xué)生代簽到幫同學(xué)的行為,也不會(huì)因?yàn)榭记谙到y(tǒng)等煩雜事務(wù)影響教學(xué)管理。本設(shè)計(jì)是基于藍(lán)牙技術(shù)的考勤系統(tǒng)創(chuàng)建一個(gè)能檢測(cè)藍(lán)牙并且完成簽到的APP,藍(lán)牙可以再一定的距離之內(nèi)來(lái)檢測(cè)學(xué)生或者員工有沒(méi)有到指定的地方上課或者工作。該考勤系統(tǒng)只用到手機(jī)端的藍(lán)牙,十分方便。原理是使用藍(lán)牙的客戶端BluetoothSocket和服務(wù)端BluetoothServerSocket兩個(gè)功能,創(chuàng)建一個(gè)使用bluetoothadapter為主的藍(lán)牙列表,這個(gè)APP系統(tǒng)能自動(dòng)搜索藍(lán)牙設(shè)備,這個(gè)APP還能登陸檢查簽到,并對(duì)事先做好的藍(lán)牙設(shè)備地址數(shù)據(jù)庫(kù)進(jìn)行對(duì)比從而完成學(xué)生的考勤登記。所以基于藍(lán)牙技術(shù)的考勤系統(tǒng)設(shè)計(jì)的意義很重大不僅能夠減少考勤成本,還能是教學(xué)管理更為高效。關(guān)鍵詞:藍(lán)牙;bluetoothadapter;BluetoothSocket;BluetoothServerSocketAttendanceSystemBasedonBluetoothTechnology-BluetoothCommunicationDesignAbstractAsacontemporarycollegestudent,theattendanceofteacherscannotbeavoidedinclass,andtheattendanceisstillmainlybasedontheteacher'srollcall.Oftenaftertherollcallhastakenupasmallpartoftheclass,isnotonlyinefficient,butalsoattendancemanystudentscanhelpotherstoreplace,sobigflaws.Inenterprises,attendanceismainlybasedonfingerprintandfacescanning,whichcostsalotandwastessomesocialresources,whichisnotconducivetopromotion.Thebluetoothattendancesystembasedoninformationarisesatthehistoricmoment,thedevelopmentofTheTimes,andismoreandmorepopular.Becausetheschoolcanbringamoreefficientwaytodealwithattendance,teachingmanagementcanbecarriedoutsmoothly,sothatstudentswillnothaveloopholestodrill,alsowillnotaffecttheteachingmanagementbecauseoftheattendancesystemandothercomplicatedthings.ThebluetoothattendancesystembasedoninformationarisesatthehistoricmomentandADAPTStothedevelopmentofTheTimes.Whentheintroductionofthisbluetoothattendancemethod,itisverypopularwithcolleges,afterall,canmaketheclasstimealotmoreefficient.ThisdesignisbasedonthebluetoothtechnologyattendancesystemtocreateanAPPthatcandetectthebluetoothandcompletethecheck-in.Thebluetoothcandetectwhetherstudentsoremployeesareattendingclassesorworkinginthedesignatedplacewithinacertaindistance.TheattendancesystemonlyUSESbluetoothonthemobileterminal,whichisveryconvenient.TheprincipleistousebluetoothclientBluetoothSocketandserviceBluetoothServerSockettwofunctions,tocreateabluetoothadapterbasedbluetoothlist,theAPPsystemcanautomaticallysearchforbluetoothdevices,theAPPcanalsologincheckin,andthepre-madebluetoothdeviceaddressdatabaseforcomparisontocompletethestudentattendanceregistration.Therefore,thedesignofattendancesystembasedonbluetoothtechnologyisofgreatsignificance,whichcannotonlyreducetheattendancecost,butalsomaketheteachingmanagementmoreefficient.Curbthebehaviorofstudentstosigntohelpclassmates,alsowillnotaffecttheteachingmanagementbecauseoftheattendancesystemandothercomplicatedthings.Keywords:bluetooth;bluetoothadapter;bluetoothSocket;bluetoothServerSocket目錄一、引言 11.1本設(shè)計(jì)的目的、意義及應(yīng)達(dá)到的技術(shù)要求 11.2本設(shè)計(jì)在國(guó)內(nèi)外的發(fā)展概況及存在的問(wèn)題 21.3本設(shè)計(jì)應(yīng)解決的主要問(wèn)題 2二、基于藍(lán)牙的考勤系統(tǒng)設(shè)計(jì)的整體設(shè)計(jì)方案 22.1基于藍(lán)牙設(shè)計(jì)的考勤系統(tǒng)組成 22.2系統(tǒng)需求分析 32.2.1藍(lán)牙通信模塊設(shè)計(jì)的功能需求分析 32.2.2藍(lán)牙通信模塊設(shè)計(jì)的非公能需求分析 42.3系統(tǒng)的設(shè)計(jì)對(duì)象選擇及介紹 42.4系統(tǒng)設(shè)計(jì)語(yǔ)言的選擇以及介紹 5三、編程環(huán)境的搭建 83.1AndroidStudio的環(huán)境搭建 83.2MyEclipse的環(huán)境搭建 11四、藍(lán)牙技術(shù)在Android開(kāi)發(fā)中的應(yīng)用 114.1藍(lán)牙的介紹 114.2藍(lán)牙技術(shù)協(xié)議的協(xié)議棧和協(xié)議棧體系結(jié)構(gòu) 124.2.1藍(lán)牙的底層協(xié)議 134.2.2藍(lán)牙的中間層協(xié)議 134.2.3藍(lán)牙的應(yīng)用層協(xié)議 144.3Android系統(tǒng)中的Android.Bluetooth包 14藍(lán)牙通信模塊設(shè)計(jì)的具體實(shí)現(xiàn) 165.1設(shè)計(jì)思路 175.2建立藍(lán)牙的連接 175.3讀取數(shù)據(jù),發(fā)送消息和文件 185.4監(jiān)聽(tīng)藍(lán)牙設(shè)備 21總結(jié)和工作展望 226.1總結(jié) 226.2工作展望 23參考文獻(xiàn) 24致謝 25附錄 26一、引言在如今的大學(xué)考勤系統(tǒng)中,很多都是以紙張為載體的考勤,而且浪費(fèi)老師講課的時(shí)間,最主要很多學(xué)生可以蒙混過(guò)關(guān),想不去上課就不去上課,造成當(dāng)代大學(xué)生很多人沒(méi)有很好完成大學(xué)學(xué)業(yè)。而企業(yè)的考勤系統(tǒng),是用了指紋和掃描臉部為主,在這些考勤中,效率是提高了很多,也很難出現(xiàn)考勤的錯(cuò)誤,唯一的缺點(diǎn)就是成本高而且還有復(fù)雜的操作,在資源有限的社會(huì),不利于推廣。在科技不斷發(fā)展的如今,這一類考勤慢慢會(huì)被社會(huì)所拋棄,所以這時(shí)候基于藍(lán)牙設(shè)計(jì)的考勤系統(tǒng)應(yīng)運(yùn)而生?;谒{(lán)牙設(shè)計(jì)的考勤系統(tǒng),就是通過(guò)APP連接到手機(jī)的藍(lán)牙,登錄自己的信息實(shí)現(xiàn)課堂上或者上班的考勤,簡(jiǎn)單方便。這個(gè)APP它具有注冊(cè)信息,登錄信息,檢查簽到,和請(qǐng)假的功能,APP通過(guò)HTTP協(xié)議與服務(wù)器通信,通過(guò)數(shù)據(jù)庫(kù)管理我們的簽到數(shù)據(jù),老師端從而處理我們的簽到信息,進(jìn)行簽到。這個(gè)APP還有老師端和學(xué)生端這兩個(gè)功能,適時(shí)的切換信息和收集學(xué)生的請(qǐng)假信息,從而很快的去處理這些簽到信息。1.1、本設(shè)計(jì)的目的、意義及應(yīng)達(dá)到的技術(shù)要求本設(shè)計(jì)的目的是設(shè)計(jì)出一款A(yù)PP軟件對(duì)高校上課的學(xué)生或者企業(yè)上班考勤的員工進(jìn)行智能手機(jī)藍(lán)牙的精確識(shí)別,并且做出考勤的簽到、統(tǒng)計(jì)、請(qǐng)假反饋給老師或者上司。這樣的話我們就可以很方便的將考勤交給這個(gè)APP來(lái)實(shí)現(xiàn),而不是浪費(fèi)在老師點(diǎn)名上,節(jié)約老師在考勤方面的時(shí)間。應(yīng)達(dá)到的技術(shù)是要求研究一種APP管理系統(tǒng)識(shí)別學(xué)生的藍(lán)牙,分為學(xué)生端和老師端。利用Android系統(tǒng)提供給我們的藍(lán)牙客戶端bluetoothSocket和藍(lán)牙服務(wù)端bluetoothServerSocket。通過(guò)查閱資料可以根據(jù)藍(lán)牙有其地址的唯一性,首先提前將學(xué)生的信息放進(jìn)數(shù)據(jù)庫(kù)了,一旦我們掃描到了學(xué)生的藍(lán)牙就可以進(jìn)行作信息的整合比較。我們的老師就可以通過(guò)這款A(yù)PP判斷學(xué)生的上課考勤的情況,從而實(shí)現(xiàn)本次設(shè)計(jì)功能。mysql是服務(wù)端的數(shù)據(jù)庫(kù)主要用來(lái)處理登錄、注冊(cè)、收發(fā)通知,而sqlite為本地?cái)?shù)據(jù)庫(kù),主要用來(lái)存儲(chǔ)藍(lán)牙通訊的簽到以及請(qǐng)假,收集這些數(shù)據(jù)進(jìn)行整理反饋。基于以上課題需要研究的內(nèi)容有以下方面:學(xué)生和教師的登錄注冊(cè);藍(lán)牙端的通信設(shè)置和藍(lán)牙連接設(shè)置;學(xué)生端使用藍(lán)牙簽到和藍(lán)牙請(qǐng)假;教師端查看考勤和查看請(qǐng)假;學(xué)生端調(diào)起QQ聯(lián)系老師;教師端發(fā)布通知和學(xué)生端接收通知;關(guān)于系統(tǒng)和退出系統(tǒng);分析考勤數(shù)據(jù)Mysql服務(wù)端的數(shù)據(jù)庫(kù)和sqlite本地的數(shù)據(jù)庫(kù);程序的編寫(xiě)與調(diào)試;1.2、本設(shè)計(jì)在國(guó)內(nèi)外的發(fā)展概況及存在的問(wèn)題現(xiàn)在的高校學(xué)生逃課率非常嚴(yán)重,經(jīng)過(guò)調(diào)查有20%的逃課率,有90%的學(xué)生在大學(xué)逃過(guò)課,而且不止一次,所以形勢(shì)非常嚴(yán)峻,這讓每個(gè)學(xué)校都十分苦惱,一直找不到好的辦法來(lái)解決學(xué)生上課簽到,落后的簽到方式不僅耗費(fèi)學(xué)生寶貴的上課時(shí)間而且容易造成管理失誤。而且藍(lán)牙考勤甚至沒(méi)有多少大學(xué)去展開(kāi)使用,大多數(shù)的高校還是停留在點(diǎn)名。一旦藍(lán)牙考勤慢慢引進(jìn)高校,對(duì)于高校上課考勤將會(huì)有很大的幫助。目前基于藍(lán)牙設(shè)計(jì)存在的主要問(wèn)題是藍(lán)牙的穩(wěn)定性和連接藍(lán)牙時(shí)能否容納一個(gè)班上的同學(xué)的藍(lán)牙信息傳輸。進(jìn)行1對(duì)1進(jìn)行信息傳輸?shù)臅r(shí)候,老師的服務(wù)端可以很好處理,但是在進(jìn)行多個(gè)也就是N對(duì)1的情況下進(jìn)行信息傳輸,需要一個(gè)排隊(duì)的過(guò)程,還會(huì)出現(xiàn)某些同學(xué)的信息缺失,這也會(huì)浪費(fèi)學(xué)生的上課時(shí)間和影響老師正常授課。1.3、本設(shè)計(jì)應(yīng)解決的主要問(wèn)題從系統(tǒng)的整體設(shè)計(jì)出發(fā),急需解決的是藍(lán)牙端的通信和藍(lán)牙端的連接,能夠保證大家的藍(lán)牙都能被APP識(shí)別并且連接的上,學(xué)生客戶端上要可以注冊(cè)和登錄并且填寫(xiě)我們的基本信息,并且還能使用藍(lán)牙進(jìn)行快速可靠的簽到和發(fā)送請(qǐng)假信息,我們?cè)O(shè)計(jì)的時(shí)候?qū)W生端還多了一項(xiàng)可以利用調(diào)起QQ聯(lián)系老師。而教師端可以準(zhǔn)確無(wú)誤的查看我們的考勤狀況和請(qǐng)假信息,并且可以發(fā)布通知通知學(xué)生,學(xué)生也能收到信息。在Android界面上還有關(guān)于系統(tǒng)和退出系統(tǒng)的功能。利用mysql服務(wù)端的數(shù)據(jù)庫(kù)主要用來(lái)處理登錄、注冊(cè)、收發(fā)通知,而sqlite作為本地?cái)?shù)據(jù)庫(kù),主要用來(lái)存儲(chǔ)藍(lán)牙通訊的簽到以及請(qǐng)假數(shù)據(jù),使用Java編程語(yǔ)言在Android平臺(tái)上實(shí)現(xiàn)對(duì)學(xué)生信息、課程信息和考勤信息的管理。這些都是我們需要解決的主要問(wèn)題。二、基于藍(lán)牙的考勤系統(tǒng)設(shè)計(jì)的整體設(shè)計(jì)方案2.1、基于藍(lán)牙設(shè)計(jì)的考勤系統(tǒng)組成基于藍(lán)牙的考勤系統(tǒng)是使用現(xiàn)在十分常見(jiàn)的Android系統(tǒng)平臺(tái),因?yàn)槠洳僮鞣奖憧旖?、界面友好、最主要的一點(diǎn)是其兼容性很好。使用里面的開(kāi)發(fā)工具包,再加上手機(jī)自帶的藍(lán)牙模塊。創(chuàng)建的APP分為學(xué)生端,學(xué)生端具有簽到,注冊(cè),登錄信息還有請(qǐng)假的功能,其中最關(guān)鍵的信息是每個(gè)學(xué)生對(duì)自己手機(jī)的藍(lán)牙地址,這是這個(gè)APP進(jìn)行考勤的關(guān)鍵依據(jù)。教師端也有注冊(cè),登錄,檢查簽到,對(duì)已經(jīng)進(jìn)行簽到的同學(xué),記為“到課”,對(duì)沒(méi)有到課堂上課的同學(xué)記為“曠課”,對(duì)請(qǐng)假的同學(xué)記為“請(qǐng)假”。在本系統(tǒng)中,考勤系統(tǒng)一共分為到課,遲到,請(qǐng)假,和曠課四種。若學(xué)生曠課太多就會(huì)以信息的方式進(jìn)行提醒。基于這些的實(shí)現(xiàn)都是建立一個(gè)服務(wù)端數(shù)據(jù)庫(kù)Mysql來(lái)處理這些大多數(shù)的信息。圖2.1基于藍(lán)牙設(shè)計(jì)的考勤系統(tǒng)的原理圖2.2、系統(tǒng)需求分析本文設(shè)計(jì)的目的是基于藍(lán)牙系統(tǒng)的考勤系統(tǒng)中的藍(lán)牙通信模塊,其中的學(xué)生業(yè)務(wù)設(shè)計(jì)模塊、教室業(yè)務(wù)設(shè)計(jì)模塊、后臺(tái)業(yè)務(wù)設(shè)計(jì)模塊、和用戶設(shè)計(jì)界面使用模塊這四個(gè)模塊不會(huì)在本文講解。要想了解這個(gè)藍(lán)牙通信,就需要我們知道怎么去建立兩個(gè)藍(lán)牙之間的連接與通信。2.2.1藍(lán)牙通信模塊設(shè)計(jì)的功能需求分析·打開(kāi)手機(jī)端的藍(lán)牙·搜索可用的藍(lán)牙設(shè)備(教師端和學(xué)生端都可以互相搜索)·創(chuàng)建藍(lán)牙連接socket,包括短連接和與長(zhǎng)連接?!だ脭?shù)據(jù)庫(kù)記錄藍(lán)牙的數(shù)據(jù)·利用藍(lán)牙一鍵簽到2.2.2藍(lán)牙通信模塊設(shè)計(jì)的非公能需求分析由于技術(shù)十分有限,對(duì)于mysql服務(wù)端的數(shù)據(jù)庫(kù)和sqlite本地的數(shù)據(jù)庫(kù)的理解有限,對(duì)于大量的數(shù)據(jù)進(jìn)行分析時(shí)往往會(huì)出現(xiàn)錯(cuò)誤,無(wú)法完成整個(gè)班級(jí)的考勤簽到,即是藍(lán)牙之間的連接無(wú)法做到教師端一個(gè)對(duì)N個(gè)學(xué)生的連接通信。界面的設(shè)計(jì)也不需要太復(fù)雜,做到簡(jiǎn)單明了,有藍(lán)牙簽到的指引提示。2.3、系統(tǒng)的設(shè)計(jì)對(duì)象選擇及介紹基于藍(lán)牙設(shè)計(jì)的簽到系統(tǒng)是使用Android操作系統(tǒng),手機(jī)的操作系統(tǒng)有許多種,之所以選擇Android的操作系統(tǒng),是因?yàn)樗诤芏喾矫娑寄軌蚝芎眉嫒萜ヅ?,沒(méi)有排斥性。通過(guò)分析近幾年手機(jī)的銷量,發(fā)現(xiàn)Android系統(tǒng)的手機(jī)在全球的銷量是最高的,占據(jù)著一半以上的市場(chǎng)份額,就可以知道Android系統(tǒng)是很受大眾的歡迎的。由下圖可以知道Android操作系統(tǒng)在手機(jī)方面應(yīng)用是最廣泛和最流行的。圖2.2Android手機(jī)操作系統(tǒng)全球市場(chǎng)份額現(xiàn)在很多人都是用安卓系統(tǒng)的手機(jī),Android系統(tǒng)對(duì)于我們每個(gè)人都不陌生,用了之后也發(fā)覺(jué)是很好用,他的形象也是根深蒂固在人們的腦海里。安卓系統(tǒng)是基于Linux內(nèi)核的開(kāi)放源代碼的操作系統(tǒng),是谷歌在2007年發(fā)布的一種操作系統(tǒng)。因?yàn)槟菚r(shí)候數(shù)碼相機(jī)很受歡迎,所以初衷就是探索一個(gè)怎樣的操作系統(tǒng)能夠很好地開(kāi)發(fā)和創(chuàng)建一個(gè)相對(duì)先進(jìn)的數(shù)碼相機(jī)。然而,后來(lái)發(fā)現(xiàn)市場(chǎng)對(duì)數(shù)碼相機(jī)操作系統(tǒng)的需求不夠大,他們發(fā)現(xiàn)只有手機(jī)市場(chǎng)在快速增長(zhǎng),所以安卓轉(zhuǎn)向了智能手機(jī)操作系統(tǒng)。該年的11月份,谷歌和其他84個(gè)創(chuàng)造者、開(kāi)發(fā)者和電信運(yùn)營(yíng)商共同建立了開(kāi)放手持設(shè)備聯(lián)盟,共同開(kāi)發(fā)和改進(jìn)安卓系統(tǒng)。隨后,谷歌以阿帕奇免費(fèi)開(kāi)放許可的形式發(fā)布了安卓源代碼,允許許多制造商引入基于安卓的智慧。Android系統(tǒng)后來(lái)更逐漸使用在其他的開(kāi)發(fā)上。應(yīng)用程序Android是以Java為編程語(yǔ)言,這樣能夠使接口功能化,而且他的中間層主要使用Java語(yǔ)言實(shí)現(xiàn)。在優(yōu)勢(shì)方面,Android操作系統(tǒng)有其獨(dú)特的地方。1、開(kāi)放性一個(gè)系統(tǒng)的開(kāi)放性就等于擁有了很多操作的可能性,當(dāng)開(kāi)放性很好時(shí)就會(huì)擁有很多的消費(fèi)者。之所以Android系統(tǒng)這么受歡迎,就是因?yàn)槠渚邆溟_(kāi)放性。因?yàn)殚_(kāi)放性,任何的移動(dòng)終端和廠商都可以進(jìn)行開(kāi)發(fā)其想要的功能和使用。還可以利用其開(kāi)放性進(jìn)行優(yōu)化系統(tǒng),提高用戶的體驗(yàn)。2、開(kāi)放的源代碼讓用戶可以利用其免費(fèi)的核心代碼,免費(fèi)的話用的人就會(huì)多。還向開(kāi)發(fā)者提供SDK,這樣的話很多程序員就可以很簡(jiǎn)單的編寫(xiě)各種應(yīng)用的軟件。場(chǎng)強(qiáng)的網(wǎng)絡(luò)功能Android使用的WebView組件和內(nèi)層建造的瀏覽器是以WebKit為核心,所以里面的很多APP可以實(shí)現(xiàn)內(nèi)嵌各種高端的網(wǎng)頁(yè)功能。表現(xiàn)個(gè)性Android系統(tǒng)使用Widget來(lái)實(shí)現(xiàn)界面的個(gè)性化,很多廠家都可以完善當(dāng)前的界面,并且還可以修改,設(shè)計(jì)屬于我們自己喜歡的產(chǎn)品風(fēng)格。多任務(wù)系統(tǒng)Android系統(tǒng)可以同時(shí)打開(kāi)我們我們想要打開(kāi)的應(yīng)用,而且能做到不卡頓很舒暢,我們可以看著視頻的同時(shí)在微信或者QQ發(fā)送消息,主要是因?yàn)锳ndroid系統(tǒng)具有很強(qiáng)的代碼功能使其有消息處理機(jī)制。6、Google應(yīng)用由于谷歌公司在近幾年的不斷發(fā)展,讓現(xiàn)在互聯(lián)網(wǎng)都與其緊密的聯(lián)系,也讓我們的生活和網(wǎng)絡(luò)相互連接。谷歌還推出了很多的功能化服務(wù),而作為其中的一份子,Android可以和這些服務(wù)進(jìn)行調(diào)用還有結(jié)合,使得功能更加強(qiáng)大。2.4、系統(tǒng)設(shè)計(jì)語(yǔ)言的選擇以及介紹Android應(yīng)用程序有大部分是采用我們熟知的Java語(yǔ)言開(kāi)發(fā)的,在做這個(gè)考勤系統(tǒng)時(shí),本人一開(kāi)始選用的是c和c++來(lái)實(shí)現(xiàn)藍(lán)牙的通信,通過(guò)看協(xié)議時(shí)序圖,但是后來(lái)查找關(guān)于c語(yǔ)言設(shè)計(jì)的Android資料少之又少,所以就放棄這個(gè)想法,因?yàn)閷?shí)在是難以進(jìn)行本次手機(jī)系統(tǒng)。因?yàn)槲覍I(yè)學(xué)習(xí)的是C語(yǔ)言,在做這個(gè)考勤系統(tǒng)之前要不斷查找Java的資料,自學(xué)了Java語(yǔ)言,花費(fèi)了很多時(shí)間,也讓完成這個(gè)考勤系統(tǒng)的難度增加了不少。在傳統(tǒng)的Java語(yǔ)言開(kāi)發(fā)里,Java文件的源代碼是一步步轉(zhuǎn)化成可執(zhí)行的二進(jìn)制機(jī)器碼的。由下圖分析可得先是將源代碼轉(zhuǎn)化成.class文件,JVM可理解的Java字節(jié),再通過(guò)JVM轉(zhuǎn)化為二進(jìn)制機(jī)器碼。圖2.3Java語(yǔ)言執(zhí)行的過(guò)程Java是一種面向?qū)ο蟮?、易理解易用的、?dòng)態(tài)的語(yǔ)言,它是跨平臺(tái)、分布式的、闡釋的、多線程的,具有較高的安全性及移植性,非常強(qiáng)大,并且結(jié)構(gòu)是中立的,性能極佳。而C語(yǔ)言則是面向過(guò)程的語(yǔ)言。Java也對(duì)c及c++語(yǔ)言進(jìn)行了學(xué)習(xí),發(fā)現(xiàn)在風(fēng)格方面,它與后二者非常相似,且它的誕生正是因?yàn)殚_(kāi)發(fā)者對(duì)C語(yǔ)言的不甚滿意。從本質(zhì)上來(lái)看,java是一種半編譯半解釋的語(yǔ)言。它先把編譯寫(xiě)好的源代碼編,使其成為二進(jìn)制字節(jié)碼,接著再借助各平臺(tái)上所裝設(shè)的虛擬機(jī)來(lái)完成對(duì)字節(jié)碼的解釋執(zhí)行,這使得僅需1次編譯就可以到處執(zhí)行的跨平臺(tái)特性得以達(dá)成。作為通用的程序設(shè)計(jì)語(yǔ)言,Java的功能較為全面,可在要求高、可信的應(yīng)用程序的開(kāi)發(fā)中起到關(guān)鍵的作用。同c語(yǔ)言無(wú)異,Java語(yǔ)言也具有易學(xué)性。在對(duì)其語(yǔ)法有所了解后,就能夠發(fā)現(xiàn)它和C、C++語(yǔ)言十分相似,基本上所有的程序工作者都對(duì)C語(yǔ)言有所掌握,而且基于此進(jìn)行編程,所以于他們而言,Java語(yǔ)言的學(xué)習(xí)及運(yùn)用難度都不大。在Java語(yǔ)言當(dāng)中,沒(méi)有多繼承等c++語(yǔ)言里運(yùn)用頻率極低、理解難度大的特點(diǎn)。指針是C語(yǔ)言的學(xué)習(xí)當(dāng)中最難理解的部分,而它在Java語(yǔ)言中是不需要的。另外,Java語(yǔ)言對(duì)內(nèi)存中的自動(dòng)的廢料收集進(jìn)行了提供,故而程序工作者無(wú)需考慮內(nèi)存的負(fù)荷管理問(wèn)題。以下就其特點(diǎn)展開(kāi)詳述:1.Java語(yǔ)言是強(qiáng)制面向?qū)ο蟮恼Z(yǔ)言Java對(duì)繼承、接口、類等語(yǔ)句加以供應(yīng),此即為Android對(duì)其這般運(yùn)用的根本緣由。為使編程更易于完成,java對(duì)各個(gè)類彼此間的單繼承、各接口彼此間的多繼承、類和接口之間的達(dá)成機(jī)制都是支持的。它對(duì)動(dòng)態(tài)綁定予以支持,但是C++語(yǔ)言的動(dòng)態(tài)綁定則僅用于虛函數(shù)中。可見(jiàn),Java語(yǔ)言是純的且面向?qū)ο蟮?。Java語(yǔ)言是強(qiáng)壯的因?yàn)樵O(shè)有異常處理、強(qiáng)類型機(jī)構(gòu)以及自動(dòng)收集垃圾等,所以有效地確保了Java語(yǔ)言開(kāi)發(fā)的程序強(qiáng)壯性。放棄指針可謂是Java最聰明的一個(gè)決斷。而安全檢查機(jī)制則是使其強(qiáng)壯性得到提升的關(guān)鍵所在。安全可靠性能好的語(yǔ)言Java語(yǔ)言編程復(fù)雜度低,外部一般難以干擾到它,而且它還有著極強(qiáng)的表達(dá)力、執(zhí)行力。為將外部代碼的影響消除掉,它還對(duì)一個(gè)安全機(jī)制進(jìn)行了設(shè)立。譬如分配字節(jié)、類的種類等均可被其保護(hù)。此外,它的安全特性也比較豐富,備受使用者的青睞。Java語(yǔ)言是分布式的一個(gè)大的系統(tǒng)通常為劃分為多個(gè)子系統(tǒng)來(lái)完成,因分布式是Java語(yǔ)言的突出特點(diǎn),故而能夠借助計(jì)算機(jī)網(wǎng)絡(luò)向諸多臺(tái)主機(jī)上分布諸多的后端工作,讓這些主機(jī)去完成具體的工作,以使效率大為提升。同時(shí),還能夠?qū)TTP與FTP等的TCP/IP協(xié)議進(jìn)行較佳的處理,以遠(yuǎn)程調(diào)用為基礎(chǔ)的、以消息方式為基礎(chǔ)的系統(tǒng)間通信、網(wǎng)絡(luò)通信技術(shù)在分布式應(yīng)用中較為常用。除此以外,此類應(yīng)用的開(kāi)發(fā)還有一個(gè)關(guān)鍵的方式,即Java的RMl機(jī)制。Java語(yǔ)言是跨平臺(tái)可移植的因?yàn)轶w系結(jié)構(gòu)具有中立性,所以Java語(yǔ)言也就具有了可移植性。此外,該語(yǔ)言還對(duì)各種基本數(shù)據(jù)類型的長(zhǎng)度設(shè)定了要求,而且有著較高的嚴(yán)格度。Java系統(tǒng)的可移植性極強(qiáng),以Java語(yǔ)言達(dá)成Java編譯器,幾乎可以順利工作于所有的硬件或軟件平臺(tái)上,從而避免了諸多煩惱。Java語(yǔ)言是原生支持多線程的線程是Java語(yǔ)言里一種比較的特殊對(duì)象,其管理是由Jvm來(lái)完成的,且其創(chuàng)建必須由該語(yǔ)言里的Thread類或者其子(孫)類來(lái)進(jìn)行。Jvm是基于lwp(輕量級(jí)進(jìn)程)來(lái)使得與操作系統(tǒng)的內(nèi)核線程1:1的映射關(guān)系得以達(dá)成的,從而使Java內(nèi)部的多線程得以變?yōu)楝F(xiàn)實(shí),同時(shí)對(duì)詳細(xì)的語(yǔ)法進(jìn)行了供應(yīng),進(jìn)而將具體的編碼完成。簡(jiǎn)單而言,Java的多線程即可對(duì)內(nèi)核線程加以調(diào)取運(yùn)用從而進(jìn)行執(zhí)行的,故而其對(duì)于多線程的支持可謂是與生俱來(lái)的。在Java里,線程的設(shè)立可由兩個(gè)途徑達(dá)成:一是對(duì)型構(gòu)為T(mén)hread(Runnable)的構(gòu)造子加以運(yùn)用,對(duì)1個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象進(jìn)行包裝,使其成為1個(gè)線程;二是將子類從Thread類派生出來(lái)且對(duì)run方法進(jìn)行重寫(xiě),線程就是基于該子類而設(shè)立的。Java語(yǔ)言是動(dòng)態(tài)的在編譯過(guò)程中,有需要我們分配空間的動(dòng)態(tài)環(huán)境和靜態(tài)環(huán)境,Java語(yǔ)言能夠很好地適應(yīng)一些無(wú)時(shí)無(wú)刻不在變化的動(dòng)態(tài)環(huán)境。主要是操作類,動(dòng)態(tài)地被載入到運(yùn)行環(huán)境。并且SE能夠很好地進(jìn)行升級(jí)。在Java語(yǔ)言的健壯和可靠的優(yōu)良特性下,就可以大大降低運(yùn)營(yíng)的維護(hù)成本。也可以縮短開(kāi)發(fā)時(shí)間。三、編程環(huán)境搭建3.1、AndroidStudio的環(huán)境搭建AndroidStudio是Android應(yīng)用設(shè)計(jì)軟件常用的一種環(huán)境軟件,用來(lái)編寫(xiě)Java代碼。搭建這個(gè)軟件的方法如下:首先打開(kāi)網(wǎng)上下載好的AndroidStudio的安裝包點(diǎn)擊進(jìn)行安裝,一步步操作下去選擇自己安裝的程序路徑,我把它放在D盤(pán)安裝Androidstudio程序完畢后,對(duì)其進(jìn)行配置,配置是非常重要的,一旦配置錯(cuò)誤了,就會(huì)出現(xiàn)很多軟件上的錯(cuò)誤,按照如下圖勾選圖3.1然后選擇自己喜歡的界面主題這里最重要的還是指定SDK的路徑,路徑錯(cuò)誤,到時(shí)候編譯也會(huì)出錯(cuò),如果電腦下載好了SDK,即需指定其路徑。點(diǎn)擊finish就進(jìn)入了Androidstudio的歡迎界面圖3.2Androidstudio歡迎界面Androidstudio已經(jīng)安裝成功,就可以搭建自己的項(xiàng)目了圖3.3項(xiàng)目中的工程目錄結(jié)構(gòu)圖3.4Androidstudio的工作窗口3.2、MyEclipse的環(huán)境搭建MyEclipse,是在eclipse基礎(chǔ)上加上自己的插件開(kāi)發(fā)而成的功能強(qiáng)大的企業(yè)級(jí)集成開(kāi)發(fā)環(huán)境,主要用于Java、JavaEE以及移動(dòng)應(yīng)用的開(kāi)發(fā)。MyEclipse的功能非常強(qiáng)大,支持也十分廣泛,尤其是對(duì)各種開(kāi)源產(chǎn)品的支持相當(dāng)不錯(cuò)。以下是其搭建方法:1.首先在官網(wǎng)下載好MyEclipse10安裝包2.點(diǎn)擊MyEclipse10圖標(biāo)進(jìn)行安裝3.然后選好工作路徑,這里注意最好不好出現(xiàn)中文路徑(代碼放在的地方不能出現(xiàn)中文路徑,否則編譯的時(shí)候會(huì)出現(xiàn)錯(cuò)誤)4.安裝完畢就可以新建項(xiàng)目了圖3.5MyEclipse的工作窗口藍(lán)牙技術(shù)在Android開(kāi)發(fā)中的應(yīng)用4.1藍(lán)牙的介紹藍(lán)牙(Bluetooth)是一種能夠使短距離(一般為10米之內(nèi))的兩個(gè)設(shè)備之間在無(wú)線的情況下,完成他們之間的通信,這個(gè)通信是十分高效和安全的,所以在設(shè)備之間的通信時(shí),很多人都會(huì)選擇藍(lán)牙進(jìn)行。所以,藍(lán)牙技術(shù)是短距離安全無(wú)線通信技術(shù)。特別是在WiFi還沒(méi)有那么普遍的時(shí)候,上網(wǎng)由于網(wǎng)速和流量的限制,下載東西十分不方便,所以我們的一些視頻、文檔、圖片還有音樂(lè)都是通過(guò)藍(lán)牙進(jìn)行資源共享。當(dāng)我們距離比較遠(yuǎn)的時(shí)候,如果上其他外設(shè)的幫助,或者增加功率是可以讓兩個(gè)設(shè)備之間的通信距離變長(zhǎng)。因?yàn)樗恍枰暾?qǐng)無(wú)線電波許可證,所以在使用藍(lán)牙技術(shù)進(jìn)行通信時(shí),不用擔(dān)心會(huì)受一些外界頻率的干擾。通過(guò)查閱資料,可以知道要區(qū)分每個(gè)藍(lán)牙設(shè)備,就要操作藍(lán)牙的地址,因?yàn)槊總€(gè)藍(lán)牙模塊的地址都是獨(dú)特唯一的,不一樣的設(shè)備,藍(lán)牙的地址是不同的。這樣就很好的建立精確的通信。在Android平臺(tái)中,他包含了藍(lán)牙的框架,這樣可以使一些其他的設(shè)備以無(wú)線傳輸?shù)姆绞脚c藍(lán)牙設(shè)備進(jìn)行很穩(wěn)定的數(shù)據(jù)交換。所以這也是我們考慮用Android平臺(tái)去完成這次的藍(lán)牙考勤系統(tǒng)。而不是選擇做個(gè)硬件去實(shí)現(xiàn)。4.2、藍(lán)牙技術(shù)協(xié)議的協(xié)議棧和協(xié)議棧體系結(jié)構(gòu)我們都知道每個(gè)通信工具都有自己的一套協(xié)議,藍(lán)牙也不例外。藍(lán)牙技術(shù)擁有自己的一套協(xié)議,是串口通信并且符合spp協(xié)議。我們首先要了解他的藍(lán)牙協(xié)議棧,有四個(gè)層次,分別為:物理層、邏輯層、L2CAPLayer和應(yīng)用層。物理層,負(fù)責(zé)提供數(shù)據(jù)傳輸?shù)奈锢硗ǖ馈_壿媽?,是在物理層的基礎(chǔ)上,提供兩個(gè)以上的設(shè)備進(jìn)行邏輯傳輸。L2CAP層,負(fù)責(zé)邏輯層中的邏輯鏈路。基于該協(xié)議,不同的Applicaon可共享同一個(gè)邏輯鏈路,就好像類似于TCP/IP中的端口的概念。APP層,是在用于L2CAP提供的channel,在理解了藍(lán)牙協(xié)議中的應(yīng)用層后就可以實(shí)現(xiàn)各種各樣的功能。當(dāng)我們使用不同的平臺(tái)和不同的設(shè)備的時(shí)候,Profile是藍(lán)牙協(xié)議的一種特別的存在,能夠?qū)崿F(xiàn)在不同平臺(tái)下的不同設(shè)備中的互相連接與通信。所以這個(gè)層里定義了各種Application規(guī)范,這些應(yīng)用層規(guī)范稱作藍(lán)牙profile。圖4.1藍(lán)牙的協(xié)議棧藍(lán)牙的協(xié)議棧的體系結(jié)構(gòu),根據(jù)各層協(xié)議在整個(gè)藍(lán)牙協(xié)議中所處的位置,藍(lán)牙協(xié)議又可以分為應(yīng)用層協(xié)議、中間層協(xié)議和底層協(xié)議。4.2.1、藍(lán)牙的底層協(xié)議它是實(shí)現(xiàn)藍(lán)牙協(xié)議信息當(dāng)中的多種數(shù)據(jù)流進(jìn)行的傳輸鏈路,并且是該體系結(jié)構(gòu)的根基,主要涵蓋了以下幾方面。(1)射頻協(xié)議作為藍(lán)牙協(xié)議棧里面最底層的協(xié)議,其主要是接收部分頻段,安排通道等,用以對(duì)物理底層無(wú)線傳輸進(jìn)行規(guī)范,使空中的數(shù)據(jù)收發(fā)得以達(dá)成。具有較佳的保密性、抗干擾性。這亦為藍(lán)牙傳輸?shù)囊粋€(gè)突出特點(diǎn)?;鶐f(xié)議藍(lán)牙協(xié)議層里射頻層之上即為基帶層,藍(lán)牙最關(guān)鍵的物理層就是這兩層組成的。基帶層能夠控制鏈路,譬如ACL鏈路等藍(lán)牙里的很多鏈路都受其管理。除此以外,它還可以接入藍(lán)牙設(shè)備、對(duì)數(shù)據(jù)包進(jìn)行處理、對(duì)藍(lán)牙數(shù)據(jù)進(jìn)行傳送等。(3)鏈路管理協(xié)議鏈路管理協(xié)議是一種數(shù)據(jù)結(jié)構(gòu)式的鏈路層協(xié)議,主要執(zhí)行一些設(shè)置藍(lán)牙、認(rèn)證藍(lán)牙、配置藍(lán)牙,說(shuō)白就是規(guī)定設(shè)備與設(shè)備之間怎樣建立連接和怎樣去通信,其鏈路的安全在這層協(xié)議里也很好地體現(xiàn),還可以發(fā)現(xiàn)一些遠(yuǎn)程藍(lán)牙并通過(guò)鏈路管理協(xié)議進(jìn)行通信。4.2.2、藍(lán)牙的中間層協(xié)議藍(lán)牙的中間層協(xié)議又可以分為主機(jī)控制器接口協(xié)議、邏輯鏈路控制與適配協(xié)議、串口仿真協(xié)議、TCP(電話通信協(xié)議)和SDP(服務(wù)發(fā)現(xiàn)協(xié)議)。這些協(xié)議之間的合作,可以很好地控制著藍(lán)牙數(shù)據(jù)幀的重新組裝和分解、服務(wù)質(zhì)量、組提取等。主機(jī)控制器接口協(xié)議在主機(jī)控制層有著很多傳輸層時(shí),它可以透明化,只需要它完成藍(lán)牙數(shù)據(jù)間傳輸?shù)娜蝿?wù),而且不需要清楚數(shù)據(jù)的格式。串口仿真協(xié)議運(yùn)用于射頻通信,它可以基于ETS10710串口仿真協(xié)議于L2CAP上對(duì)RS-232九針串口電線電纜接口進(jìn)行仿真,藍(lán)牙設(shè)備可以在無(wú)線傳輸期間借助PFCOMM來(lái)支持高層協(xié)議譬如PPP、TCP/IP、WAP等。邏輯鏈路控制與適配協(xié)議能夠?qū)Ψ?wù)質(zhì)量及協(xié)議進(jìn)行控制,還能夠?qū)?shù)據(jù)進(jìn)行拆開(kāi)解析等,能夠?yàn)橹虚g層其他協(xié)議的實(shí)現(xiàn)創(chuàng)造其所需的基礎(chǔ)性條件,它是藍(lán)牙協(xié)議棧最為關(guān)鍵的根基。電話通信協(xié)議它是一個(gè)面向bit以IIU-T控制規(guī)范為基礎(chǔ)的協(xié)議,能夠?qū)λ{(lán)牙設(shè)備間語(yǔ)音及數(shù)據(jù)的呼叫控制指令進(jìn)行提供。相較于WLAN而言,藍(lán)牙技術(shù)支持語(yǔ)音,這正是二者的不同所在。服務(wù)發(fā)現(xiàn)協(xié)議網(wǎng)絡(luò)都有其特定的協(xié)議,服務(wù)發(fā)現(xiàn)協(xié)議提供一種方式發(fā)現(xiàn)這個(gè)協(xié)議的存在并解釋其特征。4.2.3、藍(lán)牙的應(yīng)用層協(xié)議藍(lán)牙的應(yīng)用層協(xié)議有一些指定模型組成,在廠家生產(chǎn)藍(lán)牙設(shè)備時(shí)候,都要遵循這種指定的模型,一旦遵循這種指定的模型,就可以簡(jiǎn)單的交換對(duì)象,從而有很好的平臺(tái)獨(dú)立性。有著無(wú)線應(yīng)用協(xié)議(WAP)和音頻協(xié)議(Audio)。圖4.2藍(lán)牙協(xié)議棧的體系結(jié)構(gòu)4.3、Android系統(tǒng)中的Android.Bluetooth包要想完成藍(lán)牙設(shè)備的通信和設(shè)備與設(shè)備之間的連接,我們就一定要會(huì)編寫(xiě)藍(lán)牙模塊和藍(lán)牙設(shè)備之間數(shù)據(jù)通信的代碼。完成設(shè)備雙方之間的通信需要執(zhí)行以下流程:開(kāi)啟學(xué)生手機(jī)端和教師手機(jī)端藍(lán)牙設(shè)備并且設(shè)置為可搜索模式、進(jìn)而搜索并進(jìn)行匹配藍(lán)牙、設(shè)備與設(shè)備之間的連接通信、最后一步就是實(shí)現(xiàn)設(shè)備之間的數(shù)據(jù)間的傳輸。實(shí)現(xiàn)這些我們就需要了解Android.Bluetooth包里的基本類:BluetoothAdapter類:這個(gè)類是Android提供的一個(gè)很重要的類,它可以通過(guò)調(diào)用創(chuàng)建的對(duì)象的靜態(tài)方法getDefaultAdapter()。用法為:圖4.3BluetoothAdapter類的用法藍(lán)牙的開(kāi)關(guān)狀態(tài)可以簡(jiǎn)化為如下圖:圖4.4藍(lán)牙開(kāi)關(guān)狀態(tài)上面的BluetoothAdapter只是獲取藍(lán)牙適配器的對(duì)象,Android還提供了該類的API函數(shù),可以有更多的藍(lán)牙控制權(quán),如:enable()該方法用于打開(kāi)我們的手機(jī)藍(lán)牙。StartDiscovery()方法是用來(lái)發(fā)現(xiàn)周圍打開(kāi)的藍(lán)牙設(shè)備的任務(wù),相當(dāng)于藍(lán)牙設(shè)備的一個(gè)眼睛。若發(fā)現(xiàn)有藍(lán)牙設(shè)備的存在,就會(huì)返回一個(gè)布爾值,我們就可以從這個(gè)設(shè)備中獲取相關(guān)的信息和建立通信。isEnable()方法顧名思義就是檢查藍(lán)牙設(shè)備可以用或者不可以用,依靠其返回值來(lái)確定這個(gè)藍(lán)牙設(shè)備是不是可以用。isDiscovery()方法和isEnable差不多,也是用其返回值來(lái)確定是否正在搜索周圍可用的藍(lán)牙設(shè)備。getName()方法就是獲取藍(lán)牙設(shè)備的名稱。cancelDiscovery()就是取消藍(lán)牙設(shè)備的發(fā)現(xiàn),當(dāng)調(diào)用該方法就是停止對(duì)周圍藍(lán)牙進(jìn)行搜索。disable()就是關(guān)閉我們的藍(lán)牙設(shè)備,藍(lán)牙一旦關(guān)閉就會(huì)停止一切工作。BluetoothSocket類是表示socket藍(lán)牙套的接口,是本地設(shè)備與其他設(shè)備的藍(lán)牙模塊進(jìn)行通信的連接點(diǎn)。在服務(wù)端與客戶端進(jìn)行數(shù)據(jù)傳輸都要用到這個(gè)類。因?yàn)檫@個(gè)藍(lán)牙簽到,有服務(wù)端的學(xué)生端和客戶端的教師端,所以這個(gè)類十分重要,使用如下圖:圖4.5獲取對(duì)象也有以下API:close()關(guān)閉連接getOutputStream()獲取輸出流。getInputStream()獲取輸入流。connect()嘗試連接。getRemoteDevice()獲取遠(yuǎn)程設(shè)備,當(dāng)BluetoothSocket處于連接中,會(huì)有特定的返回值來(lái)檢測(cè)其有沒(méi)有獲取。BluetoothServerSocket類指代的是一個(gè)服務(wù)來(lái)監(jiān)聽(tīng)對(duì)方的連接請(qǐng)求,連接成功后這個(gè)類就會(huì)返回一個(gè)BluetoothSocket。這個(gè)類也有以下API:accept()監(jiān)聽(tīng)連接。accept(inttimeout)監(jiān)聽(tīng)超時(shí)連接,這里一般會(huì)設(shè)定一個(gè)監(jiān)聽(tīng)連接的時(shí)間。close()關(guān)閉端口,釋放資源。BluetoothDevice類是指代一個(gè)藍(lán)牙的設(shè)備,可以查詢比如名稱、物理地址、類和連接狀態(tài)等相關(guān)信息。該類獲取途徑如下圖:圖4.6對(duì)象獲取途徑有以下API:getName()和上面一樣。getBluetoothClass()獲取藍(lán)牙類,需要BLUETOOTH權(quán)限。getAddress()address中文是地址。顧名思義就是獲取地址。BluetoothClass類是用來(lái)描述一個(gè)藍(lán)牙設(shè)備的通用特性和功能,還可以提供音頻或者電話服務(wù)。如果想要獲取遠(yuǎn)端設(shè)備的屬性,可以使用getBluetoothClass()方法。有以下API:BluetoothClass.Device是常量的定義。BluetoothClass.Service服務(wù)類的常量的定義。getDeviceClass()獲取設(shè)備內(nèi)部類。getMajorDeviceClass()獲取設(shè)備主類。BooleanhasService(intservice)是否支持服務(wù)類。藍(lán)牙通信模塊設(shè)計(jì)的具體實(shí)現(xiàn)本文研究的是藍(lán)牙通信模塊的內(nèi)容。5.1、設(shè)計(jì)思路(1)整個(gè)模塊的設(shè)計(jì)思路1.利用Androidstudio建立APP端,同時(shí)在利用其中提供的藍(lán)牙工具包對(duì)藍(lán)牙進(jìn)行調(diào)用還有藍(lán)牙連接,使用組件來(lái)進(jìn)行頁(yè)面設(shè)計(jì),實(shí)現(xiàn)界面布局及跳轉(zhuǎn)。2.利用servlet輕量級(jí)框架還有MySQL數(shù)據(jù)庫(kù)來(lái)進(jìn)行服務(wù)端設(shè)計(jì)。3.利用Http請(qǐng)求和響應(yīng),完成數(shù)據(jù)的傳輸和交互。4.藍(lán)牙是使用經(jīng)典藍(lán)牙的連接方式來(lái)建立藍(lán)牙連接通道。(2)藍(lán)牙模塊設(shè)計(jì)思路1.理解本模塊功能需求。2.了解藍(lán)牙設(shè)備的通信協(xié)議和Android藍(lán)牙的內(nèi)部結(jié)構(gòu)。3.選好開(kāi)發(fā)語(yǔ)言選擇Java。4.學(xué)習(xí)Android藍(lán)牙內(nèi)部的類,合理使用。5.編寫(xiě)藍(lán)牙通信和藍(lán)牙連接的代碼。6.實(shí)現(xiàn)本模塊的功能。5.2、建立藍(lán)牙的連接以代碼的形式:5.3、讀取數(shù)據(jù),發(fā)送消息和文件5.4、監(jiān)聽(tīng)藍(lán)牙設(shè)備總結(jié)和工作展望6.1、總結(jié)在本次的基于藍(lán)牙設(shè)計(jì)的考勤系統(tǒng)中,主要是對(duì)藍(lán)牙通信這個(gè)模塊進(jìn)行了介紹和說(shuō)明,在這個(gè)整體的設(shè)計(jì)中,藍(lán)牙模塊是開(kāi)頭一棒,只有做好藍(lán)牙的通信連接,還有學(xué)生端的藍(lán)牙設(shè)備和教師端的藍(lán)牙設(shè)備進(jìn)行配對(duì),才能讓這個(gè)考勤開(kāi)展起來(lái)。本文研究的考勤系統(tǒng)也就具有以下的特點(diǎn):、能夠快速的進(jìn)行藍(lán)牙設(shè)備的掃描,學(xué)生端設(shè)備和老師端的設(shè)備也可以進(jìn)行連接,并且進(jìn)行簽到,請(qǐng)假等等功能,老師與學(xué)生還可以互相發(fā)消息。在這個(gè)時(shí)代里,手機(jī)是我們必不可少的通信工具,這樣的話就很好的節(jié)約了上課的時(shí)間,保證上課的效率。、由于我們弄了MySQL的數(shù)據(jù)庫(kù),可以做一些信息的整理和利用。、操作界面簡(jiǎn)潔明了,操作更加一目了然6.2、工作展望本文設(shè)計(jì)的是基于藍(lán)牙系統(tǒng)的考勤簽到系統(tǒng)中的藍(lán)牙通信模塊的開(kāi)發(fā)和設(shè)計(jì)。經(jīng)過(guò)不斷地查找Android藍(lán)牙通信模塊的資料,能夠?qū)崿F(xiàn)學(xué)生端和教師端的藍(lán)牙連接,并且成功完成簽到。但是由于我們小組對(duì)數(shù)據(jù)庫(kù)理解能力有限,在數(shù)據(jù)的容量方面沒(méi)有做的足夠好,僅限老師端的藍(lán)牙連接幾個(gè)學(xué)生端的藍(lán)牙,也沒(méi)有辦法進(jìn)行云存儲(chǔ)技術(shù),也沒(méi)有測(cè)試手機(jī)的兼容性,出現(xiàn)了一些不可避免的兼容性錯(cuò)誤。為了更完善的利用這個(gè)簽到系統(tǒng),展望可以從以下幾個(gè)方面著手:本次設(shè)計(jì)的APP僅支持Android系統(tǒng),對(duì)于IOS系統(tǒng)是不兼容的,所以僅限于安卓系統(tǒng)的手機(jī)可以進(jìn)行簽到。不能進(jìn)行一對(duì)N的連接,就是不能進(jìn)行一個(gè)班級(jí)上的藍(lán)牙考勤簽到。功能也是比較簡(jiǎn)單單一,一個(gè)成熟的系統(tǒng)是需要多功能化的。由于小組成員開(kāi)發(fā)的能力十分有限,界面也是比較簡(jiǎn)單,信息的提示也是不夠直觀。不能很好的保證用戶體驗(yàn)效果。參考文獻(xiàn)錢(qián)志鴻,楊帆,周求湛編著.
2006藍(lán)牙技術(shù)原理、開(kāi)發(fā)與應(yīng)用[M].
北京航空航天大學(xué)出版社
2006
[2]李成思,劉欣寧.基于手機(jī)的高校課堂考勤系統(tǒng)的探索與實(shí)踐[J].河南科技.
2017(13)
[3]張晶.基于Android平臺(tái)下的高校學(xué)生考勤系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].
科技展望.
2016(17)
[4]姚南野,王林平,鄭世玨,陶立秋.基于藍(lán)牙通信的高校課堂手機(jī)考勤管理系統(tǒng)[J].
計(jì)算機(jī)與數(shù)字工程.
2014(10)
[5]邰偉鵬,徐宏.高校選課制下藍(lán)牙考勤管理系統(tǒng)的研究與實(shí)現(xiàn)[J].
安徽工業(yè)大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版).
2012(04)
[7]謝曉.基于藍(lán)牙無(wú)線局域網(wǎng)的文件傳輸系統(tǒng)的研究與設(shè)計(jì)[D].
北京郵電大學(xué)
2007張瑞,于瀟榕.基于Android智能終端移動(dòng)考勤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù)2015(4)謝振東,羅志來(lái).藍(lán)牙4.0應(yīng)用研究[J].中國(guó)新產(chǎn)品新技術(shù)2015(17)[10]弓寧.計(jì)算機(jī)軟件開(kāi)發(fā)中JAVA編程語(yǔ)言的應(yīng)用[J].計(jì)算機(jī)產(chǎn)品與流通.2020(01)[11]楊旭.JAVA編程語(yǔ)言在計(jì)算機(jī)軟件開(kāi)發(fā)中的應(yīng)用[J].電子技術(shù)與軟件工程.2018(07)致謝值此論文完成之際,大學(xué)四年尾站的鐘聲響起,這也意味著我在北京理工大學(xué)珠海學(xué)院的求學(xué)生涯進(jìn)入尾聲,這讓我感慨萬(wàn)千。在這四年的大學(xué)時(shí)光里,看似漫長(zhǎng)但時(shí)間過(guò)得很快,就仿佛剛踏入校門(mén),實(shí)則是半只腳踏出門(mén)外。在大學(xué)這四年里,我認(rèn)識(shí)了很多的朋友、同學(xué)、老師,在我遇到困難的時(shí)候都是他們陪伴在我身邊,和我一起排憂解難,一起快樂(lè)玩耍。努力奮斗的時(shí)候有他們互幫互助,使我更能體會(huì)到團(tuán)隊(duì)的重要性,由衷地感謝能在北京理工大學(xué)珠海學(xué)院里認(rèn)識(shí)到他們。當(dāng)然,為期一學(xué)期的畢業(yè)設(shè)計(jì)使我記憶深刻,我首先要感謝易國(guó)榮老師嚴(yán)謹(jǐn)治學(xué)的態(tài)度,他不厭其煩的為我們排憂解難,在我遇到困難時(shí)悉心的指導(dǎo)我,還幫我們講解論文的格式、邏輯和規(guī)范化。從他身上,我學(xué)習(xí)到的不僅僅是論文的撰寫(xiě)和項(xiàng)目的設(shè)計(jì),還學(xué)會(huì)了怎么去更好的做一件事,這讓我受益匪淺。同時(shí)也非常感謝我們組的小組成員,沒(méi)有他們,我是完成不了這個(gè)基于藍(lán)牙設(shè)計(jì)的簽到系統(tǒng),我也從中跟他們學(xué)習(xí)到Android和Java語(yǔ)言的應(yīng)用,是他們帶領(lǐng)我入門(mén)科研的深海,學(xué)習(xí)科技中的奧秘。還要感謝在這次畢設(shè)中幫助我解決困難的每個(gè)人,在我遇到藍(lán)牙通信和藍(lán)牙連接方面一頭暮水時(shí),是他們?yōu)槲抑v解藍(lán)牙通信的原理,和客戶端服務(wù)端的區(qū)分。在這次畢設(shè)中,我學(xué)到當(dāng)我們?cè)谧鲆粋€(gè)項(xiàng)目時(shí),一定要學(xué)會(huì)提出問(wèn)題還有解決問(wèn)題,在設(shè)計(jì)中要時(shí)常進(jìn)行交流,才能使得我們這個(gè)APP能夠更加完善,功能更加可靠,而且大量的資料也使得我們的視野更加廣闊。感謝父母這么多年對(duì)我的支持和鼓勵(lì)以及包容,同時(shí)為我能順利完成畢業(yè)設(shè)計(jì)給了巨大的支持。在未來(lái)的日子里將繼續(xù)學(xué)習(xí)和工作,不斷提升自己,做更好的自己!附錄附錄1程序源代碼1.藍(lán)牙連接packagecom.app.bs.kqqd.bluetooth.api;importjava.io.IOException;importjava.util.concurrent.TimeoutException;publicinterfaceConnector{voidstartServer();voidstopServer();booleanisServerOK();voidconnect()throwsTimeoutException,IOException;booleanisConnected();voidsend(byte[]b)throwsIOException;intrecv(byte[]b)throwsIOException;intrecv(byte[]b,intoffset,intcount)throwsIOException;voiddisconnect();} 調(diào)用藍(lán)牙進(jìn)行匹配連接packagecom.app.bs.kqqd.bluetooth.api;importandroid.bluetooth.BluetoothAdapter;importandroid.bluetooth.BluetoothDevice;importandroid.bluetooth.BluetoothServerSocket;importandroid.bluetooth.BluetoothSocket;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.Set;importjava.util.UUID;publicclassBluetoothConnectorimplementsConnector{publicfinalstaticStringMOS_UUID="6c12a327-0e0b-4344-8137-c41e2a79a50d";privateStringdeviceAddress;BluetoothServerSocketserverSocket;privatebooleanstopServerFlag;privateBluetoothSocketlocalSocket;privateBluetoothSocketremoteSocket;privateBluetoothSocketconnectedSocket;privateInputStreaminputStream;privateOutputStreamoutputStream;publicBluetoothConnector(){}publicBluetoothConnectorremoteDeviceAddress(StringdeviceAddress){this.deviceAddress=deviceAddress;returnthis;}publicvoidstartServer(){newThread(newRunnable(){@Overridepublicvoidrun(){BluetoothAdapterbluetoothAdapter=BluetoothAdapter.getDefaultAdapter();if(null==bluetoothAdapter){return;}try{serverSocket=bluetoothAdapter.listenUsingRfcommWithServiceRecord("MOS_SERVICE",UUID.fromString(MOS_UUID));}catch(IOExceptione){serverSocket=null;return;}stopServerFlag=false;while(!stopServerFlag){try{remoteSocket=serverSocket.accept();connectedSocket=remoteSocket;inputStream=connectedSocket.getInputStream();outputStream=connectedSocket.getOutputStream();}catch(IOExceptione){}}stopServer();}},"BluetoothServer").start();}publicvoidstopServer(){disconnect();stopServerFlag=true;if(null!=serverSocket){try{serverSocket.close();}catch(IOExceptione){e.printStackTrace();}serverSocket=null;}}@OverridepublicbooleanisServerOK(){if(null==serverSocket){returnfalse;}returntrue;}@Overridepublicvoidconnect()throwsIOException{BluetoothAdapterbluetoothAdapter=BluetoothAdapter.getDefaultAdapter();Set<BluetoothDevice>bondedDevices=bluetoothAdapter.getBondedDevices();booleandeviceFound=false;for(BluetoothDevicedevice:bondedDevices){if(device.getAddress().equals(deviceAddress)){deviceFound=true;localSocket=device.createRfcommSocketToServiceRecord(UUID.fromString(MOS_UUID));localSocket.connect();connectedSocket=localSocket;if(null!=connectedSocket){inputStream=connectedSocket.getInputStream();outputStream=connectedSocket.getOutputStream();}break;}}if(!deviceFound){thrownewIOException("bluetoothdevicenotfound");}}@OverridepublicbooleanisConnected(){if(null==connectedSocket){returnfalse;}returnconnectedSocket.isConnected();}@Overridepublicvoidsend(byte[]b)throwsIOException{if(null!=outputStream){outputStream.write(b);}}@Overridepublicintrecv(byte[]b)throwsIOException{returnrecv(b,0,b.length);}@Overridepublicintrecv(byte[]b,intoffset,intcount)throwsIOException{if(null!=inputStream){returninputStream.read(b,offset,count);}return0;}@Overridepublicvoiddisconnect(){if(null!=connectedSocket){try{inputStream=null;outputStream=null;connectedSocket.close();connectedSocket=null;}catch(IOExceptione){e.printStackTrace();}}}}3.//請(qǐng)求藍(lán)牙連接packagecom.app.bs.kqqd.bluetooth.api.request;importorg.json.JSONException;importorg.json.JSONObject;publicclassRequestMessageextendscom.app.bs.kqqd.bluetooth.api.Request{publicRequestMessage(){super(REQ_MSG);}publicRequestMessage(intcmd,Stringmsg){super(REQ_MSG);this.cmdId=cmd;this.msg=msg;}@OverridepublicRequestMessagenewInstance(){returnnewRequestMessage();}@OverridepublicJSONObjecttoJsonObject(JSONObjectjsonObject)throwsJSONException{jsonObject.put(CMD,cmdId);jsonObject.put(MSG,msg);returnjsonObject;}@OverridepublicvoidfromJsonObject(JSONObjectjsonObject)throwsJSONException{jsonObject.getInt(CMD);jsonObject.getString(MSG);}}4.未知的信息請(qǐng)求packagecom.app.bs.kqqd.bluetooth.api.request;importcom.app.bs.kqqd.bluetooth.api.Request;publicclassUnknownReqextendsRequest{publicUnknownReq(){super(Request.REQ_UNKNOWN);}@OverridepublicUnknownReqnewInstance(){returnnewUnknownReq();}}對(duì)請(qǐng)求進(jìn)行相應(yīng)處理packagecom.app.bs.kqqd.bluetooth.api;importorg.json.JSONException;importorg.json.JSONObject;publicclassResponse{publicstaticfinalintSUCCESS_CODE=0;publicstaticfinalStringCMD="cmd";publicstaticfinalStringCODE="code";publicstaticfinalStringMSG="msg";publicintcmdId;publicintcode;publicStringmsg="";publicResponse(intcmdId){this.cmdId=cmdId;}publicintgetCmdId(){returncmdId;}publicbooleanisOK(){returncode==SUCCESS_CODE;}publicJSONObjecttoJsonObject(JSONObjectjsonObject)throwsJSONException{jsonObject.put(CMD,cmdId);jsonObject.put(CODE,code);jsonObject.put(MSG,msg);returnjsonObject;}publicvoidfromJsonObject(JSONObjectjsonObject)throwsJSONException{jsonObject.getInt(CMD);jsonObject.getInt(CODE);jsonObject.getString(MSG);}publicResponsenewInstance(){returnnewResponse(cmdId);}}APP注冊(cè)請(qǐng)求和響應(yīng)packagecom.app.bs.kqqd.bluetooth.api;importcom.app.bs.kqqd.bluetooth.api.request.RequestMessage;importcom.app.bs.kqqd.bluetooth.api.request.ResponseMessage;importcom.app.bs.kqqd.bluetooth.api.request.UnknownReq;importjava.util.HashMap;importjava.util.Map;publicclassCmdFactory{privatestaticCmdFactoryinstance;privateMap<Integer,Request>requestMap=newHashMap<>();privateMap<Integer,Response>responseMap=newHashMap<>();privateCmdFactory(){register(newRequestMessage());register(newResponseMessage());}publicstaticCmdFactorygetInstance(){if(null==instance){synchronized(CmdFactory.class){if(null==instance){instance=newCmdFactory();}}}returninstance;}publicvoidregister(Requestreq){requestMap.put(req.getCmdId(),req);}publicvoidregister(Responsersp){responseMap.put(rsp.getCmdId(),rsp);}publicRequestcreateRequest(intcmd){Requestrequest=requestMap.get(cmd);if(null!=request){returnrequest.newInstance();}returnnewUnknownReq();}publicResponsecreateResponse(intcmd){Responseresponse=responseMap.get(cmd);if(null!=response){returnresponse.newInstance();}returnnewResponse(Request.REQ_UNKNOWN);}}7.//適配器packagecom.app.bs.kqqd.adapter;importandroid.content.Context;importandroid.view.ViewGroup;importcom.app.bs.kqqd.model.GanHuo;importcom.jude.easyrecyclerview.adapter.BaseViewHolder;importcom.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;/****/publicclassGanHuoAdapterextendsRecyclerArrayAdapter<GanHuo.Result>{publicGanHuoAdapter(Contextcontext){super(context);}@OverridepublicBaseViewHolderOnCreateViewHolder(ViewGroupparent,intviewType){returnnewGanHuoViewHolder(parent);}}//packagecom.app.bs.kqqd.adapter;importandroid.graphics.drawable.Drawable;importandroid.view.ViewGroup;importandroid.widget.TextView;importcom.app.bs.kqqd.R;importcom.app.bs.kqqd.model.GanHuo;importcom.app.bs.kqqd.util.TimeUtil;importcom.jude.easyrecyclerview.adapter.BaseViewHolder;/****/publicclassGanHuoViewHolderextendsBaseViewHolder<GanHuo.Result>{privateTextViewtitle;privateTextViewtype;privateTextViewwho;privateTextViewtime;publicGanHuoViewHolder(ViewGroupparent){super(parent,R.layout.ganhuo_item);title=$(R.id.title);type=$(R.id.type);who=$(R.id.who);time=$(R.id.time);}@OverridepublicvoidsetData(GanHuo.Resultdata){super.setData(data);//標(biāo)題title.setText(data.getDesc());//干貨類型type.setText(data.getType());//根據(jù)干貨類型動(dòng)態(tài)替換干貨圖標(biāo)if(data.getType().equals("Android")){setDrawableLeft(R.drawable.ic_android_black_24dp);}elseif(data.getType().equals("iOS")){setDrawableLeft(R.drawable.ic_whatshot_black_24dp);}else{setDrawableLeft(R.drawable.ic_play_circle_filled_black_24dp);}//干貨貢獻(xiàn)者who.setText(data.getWho());//干貨提交時(shí)間time.setText(TimeUtil.getFormatTime(data.getPublishedAt()));}publicvoidsetDrawableLeft(intimageId){Drawabledrawable=getContext().getResources().getDrawable(imageId);drawable.setBounds(0,0,drawable.getMi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度解除雙方智能物流解決方案合同
- 水果合同購(gòu)銷合同范本
- 二零二五年度港口工程建設(shè)項(xiàng)目施工保密協(xié)議
- 二零二五年度物業(yè)管理交接與社區(qū)安全協(xié)議
- 2025至2030年中國(guó)羅蘭機(jī)刮墨刀條數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度租賃房屋裝修工程合同
- 二零二五年度股東海洋資源開(kāi)發(fā)合作協(xié)議
- 2025至2030年中國(guó)紅雙喜餅干數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 科技助力提升中醫(yī)館服務(wù)質(zhì)量與效率
- 二零二五年度個(gè)稅抵扣贍養(yǎng)老人權(quán)益保障協(xié)議
- 寶石學(xué)基礎(chǔ)全套課件
- 4.7 數(shù)學(xué)建?;顒?dòng):生長(zhǎng)規(guī)律的描述教學(xué)設(shè)計(jì)
- 手術(shù)風(fēng)險(xiǎn)及醫(yī)療意外險(xiǎn)告知流程
- 余杭區(qū)住宅房屋裝修備案申請(qǐng)表
- 住宅建筑工程施工重點(diǎn)與難點(diǎn)應(yīng)對(duì)措施方案
- 綜合實(shí)踐活動(dòng)六年級(jí)下冊(cè) 飲料與健康課件 (共16張PPT)
- 數(shù)量金融的概況和歷史課件
- 護(hù)士職業(yè)素養(yǎng)課件
- 專業(yè)醫(yī)院lovo常用文件產(chǎn)品介紹customer presentation
- 叉車日常使用狀況點(diǎn)檢記錄表(日常檢查記錄)
- ME基礎(chǔ)知識(shí)培訓(xùn)PPT學(xué)習(xí)教案
評(píng)論
0/150
提交評(píng)論