• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Android的藍(lán)牙通信接口

      2013-12-10 14:07:16廣東工業(yè)大學(xué)自動(dòng)化學(xué)院陳志崇
      電子世界 2013年6期
      關(guān)鍵詞:表示層線程藍(lán)牙

      廣東工業(yè)大學(xué)自動(dòng)化學(xué)院 陳志崇 張 祺

      1.引言

      隨著電子技術(shù)的不斷進(jìn)步,手持式終端越來越輕便,性能卻越來越好。同時(shí),手持式終端在物聯(lián)網(wǎng)方面的應(yīng)用十分廣泛。作為當(dāng)今市場(chǎng)廣泛、功能最豐富且安全的藍(lán)牙技術(shù)。首先,藍(lán)牙技術(shù)包含了傳感器技術(shù)、識(shí)別技術(shù)、移動(dòng)通信技術(shù)等,這些技術(shù)與物聯(lián)網(wǎng)密切相關(guān)[1]。其次,藍(lán)牙的低功耗被看作消費(fèi)電子產(chǎn)品、體育、健康護(hù)理、汽車、自動(dòng)化等領(lǐng)域一大技術(shù)突破,也是物聯(lián)網(wǎng)技術(shù)的重要組成部分。作為手持終端的Android操作系統(tǒng)在三年多的時(shí)間里,高速發(fā)展,特別是Android的開放性,大大降低了品的成本,Android 4.0版本對(duì)于平板電腦的支持,奠定了它在移動(dòng)系統(tǒng)市場(chǎng)的主流地位。本文通過詳細(xì)分析藍(lán)牙技術(shù)以及Android Bluetooth APIs,設(shè)計(jì)出基于Android平臺(tái)的藍(lán)牙通信接口。

      2.Android操作系統(tǒng)

      Android一詞的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。目前,最新版本為Android 4.1 Ice Cream Sandwich[2]。

      Android操作系統(tǒng)架構(gòu)從下到上分為5部分:Linux內(nèi)核、Android Runtime、庫、應(yīng)用程序框架和應(yīng)用程序。

      (1)Linux內(nèi)核

      Android是基于Linux 3.0內(nèi)核,它提供了例如安全機(jī)制、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)堆棧、驅(qū)動(dòng)模塊等內(nèi)容。Linux Kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細(xì)節(jié)而為上層提供統(tǒng)一的服務(wù),使應(yīng)用開發(fā)人員無需關(guān)心硬件細(xì)節(jié)[3]。

      (2)Android Runtime

      Android包含一個(gè)核心庫的集合,提供大部分在Java編程語言核心類庫中可用的功能。

      (3)Libraries

      Android包含一個(gè)C/C++庫的集合,這些庫供Android系統(tǒng)的不同組件使用。這些功能通過Android的應(yīng)用程序框架(Application Framework)暴露給開發(fā)者。

      (4)Application Framework

      通過提供開放的開發(fā)平臺(tái),Android使開發(fā)者能夠編制極其豐富和新穎的應(yīng)用程序。

      (5)應(yīng)用層(Applications)

      Android裝配一個(gè)核心應(yīng)用程序集合。所有應(yīng)用程序都是用Java編程語言寫的。

      Android作為一款完整的、開放的、免費(fèi)的平臺(tái),在僅僅幾年多的時(shí)間就占據(jù)了移動(dòng)市場(chǎng)的大半份額。隨著Google在4.0以后的版本中對(duì)手機(jī)和平板電腦的歸一管理,Android會(huì)變得越來越完善。

      3.藍(lán)牙技術(shù)

      3.1 概念

      藍(lán)牙是一個(gè)開放性的。短距離無線通信技術(shù)標(biāo)準(zhǔn),它可以用于在較小的范圍內(nèi)通過無線連接的方式實(shí)現(xiàn)固定設(shè)備以及移動(dòng)設(shè)備之間的網(wǎng)絡(luò)互連,可以在各種數(shù)字設(shè)備之間實(shí)現(xiàn)靈活、安全、低成本、小功耗的話音和數(shù)據(jù)通信。藍(lán)牙技術(shù)可以方便地嵌入到單一的CMOS芯片中,因此它特別適用于小型的移動(dòng)終端。

      3.2 關(guān)鍵技術(shù)

      (1)跳頻技術(shù)

      藍(lán)牙的載頻選用全球通用的2.45GHz ISM頻段,由于2.45GHz的頻段是對(duì)所有無線電系統(tǒng)都開放的頻段,因此使用其中的任何一個(gè)頻段都有可能遇到不可預(yù)測(cè)的干擾源。采用跳頻擴(kuò)譜技術(shù)是避免干擾的一項(xiàng)有效措施。

      (2)微微網(wǎng)和分散網(wǎng)

      當(dāng)兩個(gè)藍(lán)牙設(shè)備成功建立鏈路后,一個(gè)微微網(wǎng)便形成了,兩者之間的通信通過無線電波在信道中隨機(jī)跳轉(zhuǎn)而完成。藍(lán)牙給每個(gè)微微網(wǎng)提供特定的跳轉(zhuǎn)模式,因此它允許大量的微微網(wǎng)同時(shí)存在,同一區(qū)域內(nèi)多個(gè)微微網(wǎng)的互聯(lián)形成了分散網(wǎng)。不同的微微網(wǎng)信道有不同的主單元,因而存在不同的跳轉(zhuǎn)模式。

      (3)安全性

      藍(lán)牙技術(shù)的無線傳輸特性使它非常容易受到攻擊,因此安全機(jī)制在藍(lán)牙技術(shù)中顯得尤為重要。雖然藍(lán)牙系統(tǒng)所采用的跳頻技術(shù)已經(jīng)提供了一定的安全保障,但是藍(lán)牙系統(tǒng)仍然需要鏈路層和應(yīng)用層的安全管理。

      (4)糾錯(cuò)技術(shù)

      藍(lán)牙系統(tǒng)的糾錯(cuò)機(jī)制分為FEC和包重發(fā)。為了減少復(fù)雜性,使開銷和無效重發(fā)為最小,藍(lán)牙執(zhí)行快ARQ結(jié)構(gòu)。ARQ結(jié)構(gòu)分為:停止等待ARQ、向后N個(gè)ARQ、重復(fù)選擇ARQ和混合結(jié)構(gòu)。

      3.3 藍(lán)牙在Android的應(yīng)用

      (1)文件傳輸

      兩臺(tái)具備藍(lán)牙的Android設(shè)備之間可以通過藍(lán)牙協(xié)議實(shí)現(xiàn)無線數(shù)據(jù)的交換,上層軟件之間需要定義好文件的格式。使用藍(lán)牙傳輸無需定義傳輸參數(shù),只需配對(duì)設(shè)備即可創(chuàng)建數(shù)據(jù)鏈路建立連接。

      (2)工業(yè)控制

      通過Android手持終端可以對(duì)工業(yè)設(shè)備進(jìn)行安全、穩(wěn)定、可靠的無線控制。工業(yè)設(shè)備安裝藍(lán)牙模塊即可與手持終端完成配對(duì),用戶可以利用手持設(shè)備對(duì)機(jī)器進(jìn)行參數(shù)的設(shè)定和修改,可以監(jiān)控設(shè)備的運(yùn)行狀態(tài)。

      (3)智能家用電器

      越來越多的家用電器具備藍(lán)牙功能,Android終端可以通過藍(lán)牙進(jìn)行無線控制電器運(yùn)行。甚至各個(gè)電器終端組成一個(gè)藍(lán)牙無線局域網(wǎng),終端之間共享信息實(shí)現(xiàn)更為強(qiáng)大的功能[4]。

      4.Android的藍(lán)牙APIs

      藍(lán)牙無線技術(shù)是當(dāng)今市場(chǎng)上支持范圍最廣泛,功能最豐富且安全的無線標(biāo)準(zhǔn)。Android平臺(tái)支持藍(lán)牙網(wǎng)絡(luò)協(xié)議棧,允許設(shè)備之間通過無線方式交換數(shù)據(jù)。Android應(yīng)用程序框架層提供了Android Bluetooth APIs給用戶使用藍(lán)牙功能。通過這些APIs各個(gè)設(shè)備的應(yīng)用程序之間可以實(shí)現(xiàn)無線連接,啟用點(diǎn)對(duì)點(diǎn)和多點(diǎn)的無線功能[5]。

      應(yīng)用程序使用藍(lán)牙APIs可以按如下操作:

      (1)掃描其他藍(lán)牙設(shè)備

      (2)查詢與本地藍(lán)牙設(shè)配器配對(duì)的設(shè)備

      (3)建立RFCOMM信道

      (4)通過發(fā)現(xiàn)服務(wù)連接到其他設(shè)備

      (5)設(shè)備間傳輸數(shù)據(jù)

      (6)管理多個(gè)藍(lán)牙連接

      相關(guān)APIs介紹:

      Bluetooth Adapter類:表示本地藍(lán)牙適配器,是所有藍(lán)牙交互的入口。通過它你可以發(fā)現(xiàn)其他設(shè)備,查詢配對(duì)列表,使用已知的MAC地址實(shí)例化一個(gè)Bluetooth Device對(duì)象和創(chuàng)建一個(gè)Bluetooth Server Socket對(duì)象來監(jiān)聽來自其他設(shè)備的連接。

      Bluetooth Device類:表示一個(gè)遠(yuǎn)端的藍(lán)牙設(shè)備。通過它請(qǐng)求與遠(yuǎn)端設(shè)備的連接或查詢?cè)O(shè)備的信息,例如:設(shè)備的名稱、地址、種類、綁定狀態(tài)。

      Bluetooth Socket類:表示一個(gè)藍(lán)牙的套接字的接口。它是應(yīng)用程序通過輸入、輸出流與其他設(shè)備通信的端口。

      要在Android應(yīng)用程序中使用藍(lán)牙特性,必須聲明兩個(gè)藍(lán)牙權(quán)限:

      5.藍(lán)牙收發(fā)程序設(shè)計(jì)

      5.1 概述

      本程序主要用到Android系統(tǒng)組件為Activity和一個(gè)BluetoothService類,并實(shí)現(xiàn)了android下的多線程編程[6][7]。在Android的設(shè)計(jì)中,每個(gè)Activity都是一個(gè)獨(dú)立的進(jìn)程,程序中BluetoothService實(shí)例會(huì)創(chuàng)建兩個(gè)線程,一個(gè)用作接收數(shù)據(jù),另一個(gè)用作發(fā)送,同時(shí)還要與Activity通信(更新數(shù)據(jù)顯示),就是跨線程通信,這時(shí)就需要Android下的Handler機(jī)制。在Android中提供了一種異步回調(diào)機(jī)制Handler,主要接受子線程發(fā)送的數(shù)據(jù),并用此數(shù)據(jù)配合主線程更新UI。

      在程序的構(gòu)建過程中使用了MVC模式,采用分層的結(jié)構(gòu),具體分為表示層、控制層和數(shù)據(jù)交換層,對(duì)應(yīng)MVC設(shè)計(jì)模式中的View、Controller和Model[8]。

      表示層向用戶展示模型的狀態(tài),在本軟件中是以Activity的顯示控件View類所展現(xiàn),一般以layout文件夾下的布局文件承載。它主要用來顯示接收數(shù)據(jù)、打開藍(lán)牙可見性及搜索藍(lán)牙設(shè)備。

      控制層主要負(fù)責(zé)協(xié)調(diào)表示層與數(shù)據(jù)交換層的交互。一方面將表示層的調(diào)用請(qǐng)求傳到數(shù)據(jù)交換層,另一方面將數(shù)據(jù)交換層接收的數(shù)據(jù)反應(yīng)到表示層。

      數(shù)據(jù)交換層,封裝了大部分藍(lán)牙數(shù)據(jù)傳輸?shù)暮诵牟僮?,如?chuàng)建socket創(chuàng)建通道、傳輸數(shù)據(jù)、處理輸入輸出流等。

      整個(gè)系統(tǒng)通過采用MVC設(shè)計(jì)模式,對(duì)整個(gè)系統(tǒng)進(jìn)行了分層,使程序邏輯清晰易懂、代碼更加健壯、事件處理高效。

      5.2 具體實(shí)現(xiàn)

      表示層,主要使用一個(gè)View類將接收的數(shù)據(jù)以圖形化的方式顯示給用戶。同時(shí)建立一個(gè)菜單讓用戶可以使用搜索藍(lán)牙、瀏覽配對(duì)設(shè)備,增加一個(gè)ListView用于顯示配對(duì)的藍(lán)牙設(shè)備,當(dāng)用戶選擇某一個(gè)設(shè)備時(shí)通過Bluetooth-Service對(duì)象建立連接。

      控制層,主要是藍(lán)牙管理,數(shù)據(jù)更新操作,發(fā)送數(shù)據(jù)。

      藍(lán)牙管理,首先判斷設(shè)備是否支持藍(lán)牙,并且可用:

      mBluetoothAdapter=BluetoothAdapter.getDefaltAdapter();

      如果mBluetoothAdapter不為空,則藍(lán)牙可用,繼續(xù)判斷藍(lán)牙是否打開,沒有則跳轉(zhuǎn)打開藍(lán)牙:

      Intent enableIntent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

      startActivityForResult(enableInte nt,REQUEST_ENABLE_BT);

      至此,藍(lán)牙已可用。

      打開藍(lán)牙后,接下來是配對(duì)設(shè)備。首先搜索藍(lán)牙設(shè)備,創(chuàng)建一個(gè)用來存儲(chǔ)搜索到的藍(lán)牙設(shè)備BluetoothDevice的List。然后注冊(cè)搜索已完成和發(fā)現(xiàn)設(shè)備兩個(gè)接收器BroadcastReceiver。通過創(chuàng)建一個(gè)線程來控制藍(lán)牙設(shè)備的搜索,當(dāng)搜索中有觸發(fā)BroadcastReceiver的事件,就直接傳遞到BroadcastReceiver進(jìn)行保存。最后將所有搜索到的BluetoothDevices保存顯示在ListView中。當(dāng)用戶選擇某個(gè)Device時(shí),系統(tǒng)會(huì)調(diào)用BluetoothService類的Connect方法進(jìn)行藍(lán)牙連接。

      同時(shí)系統(tǒng)會(huì)注冊(cè)一個(gè)Handler類用于刷新數(shù)據(jù)顯示。如果下層有數(shù)據(jù)傳入,就會(huì)調(diào)用handleMessage方法進(jìn)行刷新操作。

      交互層,主要是BluetoothService類。該類創(chuàng)建兩個(gè)線程,一個(gè)用于藍(lán)牙連接的創(chuàng)建,另一個(gè)用于數(shù)據(jù)的傳輸,分別是:

      class ConnectThread extends Thread{};

      class TransmitThread extends Thread{};

      Android系統(tǒng)通過調(diào)用Connect方法來連接藍(lán)牙設(shè)備,這是一種阻塞調(diào)用,因此需要建立一個(gè)線程來處理。如果調(diào)用成功系統(tǒng)會(huì)返回一個(gè)Socket套接字,成員變量mSocket會(huì)保存這個(gè)套接字:

      6.結(jié)語

      本接口應(yīng)用于Android手持終端,手持終端通過可以方便地?zé)o線接收和處理模塊發(fā)送的數(shù)據(jù)。整個(gè)方案穩(wěn)定可靠,成本低廉,提高了控制的便利性。用戶只需專注于數(shù)據(jù)的處理,而不必關(guān)注硬件之間通訊的問題。

      [1]劉海濤.物聯(lián)網(wǎng)技術(shù)應(yīng)用[M].機(jī)械工業(yè)出版社,2011.

      [2]Wikipedia.Android(operating system)[OL].http://en.wikipedia.org/wiki/Android_(operating_system).

      [3]Sans Serif.What Android Is[OL].http://www.tbray.org/ongoing/When/201x/2010/11/14/What-Android-Is.

      [4]喻宗泉.藍(lán)牙技術(shù)基礎(chǔ)[M].機(jī)械工業(yè)出版社,2006.

      [5]Google Inc.Bluetooth[OL].http://developer.android.com/guide/topics/connectivity/bluetooth.html.

      [6]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].機(jī)械工業(yè)出版社,2010.

      [7][印]Satya Komatineni,[美]Sayed Hashimi.精通Android3[M].楊越,譯.人民郵電出版社,2011.

      [8]閻宏.Java與模式[M].電子工業(yè)出版社,2002.

      猜你喜歡
      表示層線程藍(lán)牙
      藍(lán)牙音箱的直線之美
      基于Spring的企業(yè)級(jí)Web項(xiàng)目架構(gòu)設(shè)計(jì)研究
      軟件(2019年6期)2019-10-08 06:27:21
      簡(jiǎn)單、易用,可玩性強(qiáng)Q AcousticsBT3藍(lán)牙音箱
      適合自己的才是最好的 德生(TECSUN) BT-50藍(lán)牙耳機(jī)放大器
      淺談linux多線程協(xié)作
      緊急:藍(lán)牙指尖陀螺自燃!安全隱患頻出
      玩具世界(2017年8期)2017-02-06 03:01:38
      ASP.NET三層構(gòu)架解析
      基于SSH框架科研管理系統(tǒng)的設(shè)計(jì)
      ASP.NET三層架構(gòu)體系間數(shù)據(jù)傳遞
      電腦迷(2013年9期)2013-04-29 00:44:03
      Linux線程實(shí)現(xiàn)技術(shù)研究
      通城县| 连平县| 潮安县| 新干县| 原平市| 怀柔区| 长春市| 霸州市| 林周县| 望江县| 衡阳市| 永仁县| 定日县| 专栏| 沽源县| 安远县| 大邑县| 图们市| 商城县| 大方县| 神农架林区| 信宜市| 鸡西市| 蒲江县| 古丈县| 东海县| 佛冈县| 南华县| 沾化县| 霞浦县| 卢氏县| 繁峙县| 乃东县| 余干县| 黔南| 宣汉县| 诸城市| 汽车| 普格县| 鲁甸县| 谢通门县|