• 
    

    
    

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

      ?

      基于Android藍(lán)牙通訊的研究

      2012-01-29 08:35:50四川大學(xué)軟件學(xué)院侯新琦
      電子世界 2012年11期
      關(guān)鍵詞:四川大學(xué)內(nèi)核藍(lán)牙

      四川大學(xué)軟件學(xué)院 侯新琦 李 佳

      基于Android藍(lán)牙通訊的研究

      四川大學(xué)軟件學(xué)院 侯新琦 李 佳

      本文主要就基于Linux系統(tǒng)開(kāi)發(fā)的Android手機(jī)操作系統(tǒng)中的藍(lán)牙驅(qū)動(dòng)部分做深入淺出的分析,詳細(xì)闡述了從Linux內(nèi)核到Android設(shè)備驅(qū)動(dòng)的藍(lán)牙相關(guān)知識(shí),為愛(ài)好Android系統(tǒng)開(kāi)發(fā)者提供較為詳細(xì)的參考資料。

      Linux內(nèi)核;Android系統(tǒng);藍(lán)牙驅(qū)動(dòng);通訊;設(shè)備;網(wǎng)絡(luò)驅(qū)動(dòng)

      1.引言

      在Android手機(jī)越來(lái)越普及的今天,對(duì)于很多用戶來(lái)說(shuō),不僅僅是手機(jī)應(yīng)用的使用,越來(lái)越多的手機(jī)愛(ài)好者走進(jìn)了應(yīng)用開(kāi)發(fā)的領(lǐng)域。作為當(dāng)今網(wǎng)絡(luò)時(shí)代文件傳輸運(yùn)用最普遍的藍(lán)牙技術(shù),我們有必要將一些列的藍(lán)牙基于android的藍(lán)牙開(kāi)發(fā)知識(shí)做一個(gè)詳細(xì)的概述,筆者將從Linux內(nèi)核概述入手,再分析藍(lán)牙協(xié)議最后通過(guò)實(shí)例來(lái)更為深入地對(duì)Android藍(lán)牙開(kāi)發(fā)進(jìn)行說(shuō)明。

      2.Android系統(tǒng)及其Linux內(nèi)核概述

      Android系統(tǒng)是Google歷經(jīng)數(shù)年花費(fèi)眾多時(shí)間以及金錢開(kāi)發(fā)出來(lái)的應(yīng)用于智能手機(jī)上的操作系統(tǒng),其最大的特點(diǎn)就是系統(tǒng)開(kāi)放性。任何公司、個(gè)人開(kāi)發(fā)者、愛(ài)好者都可以參與到系統(tǒng)中。同時(shí),Android不僅是一個(gè)智能手機(jī)的系統(tǒng),也可以作為學(xué)習(xí)嵌入式Linux系統(tǒng)較為完整的軟件平臺(tái)。

      要研究Android系統(tǒng)就不能忽略其Linux內(nèi)核與驅(qū)動(dòng)程序。Android使用標(biāo)準(zhǔn)的Linux2.6內(nèi)核作為其操作系統(tǒng),隨著Android系統(tǒng)的普及,不同SDK版本中使用的Linux內(nèi)核版本也不同,不過(guò)整體的變化并不大。

      3.Android藍(lán)牙協(xié)議

      藍(lán)牙(Bluetooth)提供了移動(dòng)設(shè)備之間快速,方便的無(wú)線通信連接。近幾年來(lái)已經(jīng)廣發(fā)運(yùn)用于手機(jī)、立體聲耳機(jī)、以及無(wú)線打印機(jī)等設(shè)備中。其開(kāi)發(fā)技術(shù)的核心,是根據(jù)藍(lán)牙標(biāo)準(zhǔn)所實(shí)現(xiàn)的藍(lán)牙協(xié)議棧,據(jù)悉,從第一個(gè)版本開(kāi)發(fā)至今已經(jīng)有1.1/1.2/2.0/2.1/3.0等版本。Android藍(lán)牙協(xié)議與全球藍(lán)牙協(xié)議通用,協(xié)議棧使用BlueZ,并支持GAP,SDP以及RFCOMM規(guī)范,是一個(gè)SIG認(rèn)證的藍(lán)牙協(xié)議棧。它的底層協(xié)議層包括了眾多協(xié)議,如邏輯鏈路控制和適配協(xié)議(L2CAP)、服務(wù)發(fā)現(xiàn)協(xié)議(SDP)、串口模擬協(xié)議(RFCOMM)等。

      在藍(lán)牙棧底層包含了L2CAP,RFCOMM,GAP,SDP等協(xié)議,下面就來(lái)簡(jiǎn)單的介紹一下這些協(xié)議:

      L2CAP:Logical Link Control and Adaptation Protocol

      邏輯鏈路控制與適配協(xié)議,L2CAP協(xié)議是藍(lán)牙系統(tǒng)中的核心協(xié)議,它是基帶的高層協(xié)議,可以認(rèn)為它與LMP并行工作。

      RFCOMM:Radio Frequency Communication(s)

      串行線性仿真協(xié)議,是為了兼容傳統(tǒng)的串口應(yīng)用,同時(shí)取代有線的通信方式,藍(lán)牙協(xié)議棧需要提供與有線串口一致的通信接口而開(kāi)發(fā)出的協(xié)議。RFCOMM協(xié)議提供對(duì)基于L2CAP協(xié)議的串口仿真,基于ETSI07.10。可支持在兩個(gè)BT設(shè)備之間同時(shí)保持高達(dá)60路的通信連接。

      RFCOMM模仿RS-232串口,這種仿真協(xié)議包含無(wú)數(shù)據(jù)連接狀態(tài)的傳輸。它可以支持兩個(gè)設(shè)備之間的多串口仿真?zhèn)鬏敗?/p>

      SDP:Service Discovery Protocol

      服務(wù)發(fā)現(xiàn)協(xié)議,是一個(gè)基于C/S結(jié)構(gòu)的協(xié)議,作為藍(lán)牙協(xié)議體系中的核心協(xié)議,它是藍(lán)牙系統(tǒng)的重要組成部分,是所有用戶模式得以實(shí)現(xiàn)的基礎(chǔ)。在藍(lán)牙系統(tǒng)中,用戶需要依靠SDP來(lái)獲取設(shè)備信息,服務(wù)信息及服務(wù)特征,并在此基礎(chǔ)上建立藍(lán)牙連接。

      藍(lán)牙協(xié)議棧作為基于Android的藍(lán)牙通訊的核心,是整個(gè)藍(lán)牙通訊實(shí)現(xiàn)的關(guān)鍵,底層使用L2CAP,RFCOMM,SDP等協(xié)議支持整個(gè)基于Android的藍(lán)牙通訊是目前大多數(shù)Android藍(lán)牙通訊采用的方法。

      圖1

      4.基于Linux內(nèi)核的Android藍(lán)牙基本結(jié)構(gòu)

      即使藍(lán)牙技術(shù)在通訊領(lǐng)域已經(jīng)有了廣泛的運(yùn)用,但在Android上的運(yùn)用還并非完美,很多的特性還在開(kāi)發(fā)階段。

      4.1 Android藍(lán)牙系統(tǒng)包含內(nèi)容

      在進(jìn)行藍(lán)牙開(kāi)發(fā)前,我們必須了解A-ndroid支持的藍(lán)牙系統(tǒng)包括的具體內(nèi)容:

      Linux內(nèi)核的藍(lán)牙驅(qū)動(dòng)程序:Linux內(nèi)核的藍(lán)牙協(xié)議層;

      bluez(藍(lán)牙在用戶空間的庫(kù));bluez適配層;

      Android.bluetooth包中的各個(gè)類(藍(lán)牙在框架層的內(nèi)容);

      藍(lán)牙相關(guān)的應(yīng)用程序。

      4.2 Android藍(lán)牙系統(tǒng)基本結(jié)構(gòu)

      Android的藍(lán)牙部分的結(jié)構(gòu)如下圖1。

      5.Android藍(lán)牙開(kāi)發(fā)

      Android SDK從2.0版本開(kāi)始支持藍(lán)牙功能,眾所周知,Android藍(lán)牙仍舊受10米短距離限制,并且會(huì)被周圍信號(hào)所干擾,但就數(shù)據(jù)傳輸已經(jīng)為用戶帶來(lái)了很多方便。不利的是,開(kāi)發(fā)模擬器并不支持藍(lán)牙,開(kāi)發(fā)調(diào)試只能在真機(jī)上進(jìn)行測(cè)試,并且至少有兩部手機(jī),也制約了很多技術(shù)人員的開(kāi)發(fā)。

      下面筆者將就在Eclipse3.5,SDK版本2.2上的Android開(kāi)發(fā)進(jìn)行說(shuō)明。

      首先,要進(jìn)行藍(lán)牙的開(kāi)發(fā),必須在AndroidManifest.xml文件中加入如下權(quán)限:

      首先用getDefaultAdapter方法取得默認(rèn)的藍(lán)牙適配器,并且創(chuàng)建一個(gè)用來(lái)存儲(chǔ)搜索到的藍(lán)牙設(shè)備BluetllthDevice的List。然后在程序開(kāi)始時(shí)注冊(cè)了搜索已完成(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)和發(fā)現(xiàn)設(shè)備(BluetoothDevice.ACTION_FOUND)兩個(gè)接收器BroadcastReceiver。然后通過(guò)一個(gè)線程來(lái)控制藍(lán)牙設(shè)備的搜索(starDiscovery),當(dāng)搜索中有觸發(fā)上面接收器的事件,就直接傳遞給接收器進(jìn)行保存。最后將保存在List中的BluetoothDevice顯示在一個(gè)ListView中。

      接下來(lái)就是藍(lán)牙的最主要功能“傳送文件”的實(shí)現(xiàn)方法,我們將通過(guò)實(shí)現(xiàn)Socket連接來(lái)完成服務(wù)器和客戶端的建立以及數(shù)據(jù)的傳送。在Android的藍(lán)牙API中可以找到BluetoothServerSocket和BluetoothSocket類,在建立Socket連接時(shí)需要用到。首先介紹如何來(lái)實(shí)現(xiàn)一個(gè)藍(lán)牙Socket服務(wù)器。

      藍(lán)牙的服務(wù)器端通過(guò)線程來(lái)注冊(cè)一個(gè)具有名稱和唯一識(shí)別的UUID號(hào)的BluetoothServerSocket,然后一直監(jiān)聽(tīng)客戶端(BluetoothSocket)的請(qǐng)求,并對(duì)這些請(qǐng)求作出相應(yīng)的處理,代碼實(shí)現(xiàn)如下:

      在實(shí)際開(kāi)發(fā)中,需要首先判斷本地藍(lán)牙是否處于啟動(dòng)狀態(tài),因?yàn)樵谶B接時(shí)首先要確保本地藍(lán)牙已經(jīng)啟動(dòng),然后取得要連接的藍(lán)牙服務(wù)器,進(jìn)而通過(guò)Bluetoothdevice的createRfcommSocketT oServiceRecord方法傳入唯一的標(biāo)識(shí)UUID創(chuàng)建了一個(gè)BluetoothSocket對(duì)象,最后通過(guò)connet方法與服務(wù)器進(jìn)行了連接。

      6.結(jié)束語(yǔ)

      目前Android系統(tǒng)正以前所未有的速度發(fā)展,但藍(lán)牙的開(kāi)發(fā)目前并沒(méi)有得到太多的關(guān)注,本文通過(guò)對(duì)Android藍(lán)牙開(kāi)發(fā)的介紹為開(kāi)發(fā)愛(ài)好者提供參考。本文以Linux2.6的內(nèi)核介紹開(kāi)始,說(shuō)明藍(lán)牙協(xié)議棧,以及內(nèi)核空間庫(kù),最后再以詳細(xì)的開(kāi)發(fā)代碼完整了對(duì)Android藍(lán)牙開(kāi)發(fā)的全過(guò)程。藍(lán)牙技術(shù)在很多領(lǐng)域已經(jīng)成熟,在國(guó)內(nèi)也正在如火如荼地發(fā)展,相信在短時(shí)間內(nèi),藍(lán)牙開(kāi)發(fā)一定會(huì)在Android應(yīng)用開(kāi)發(fā)方面占領(lǐng)一席之地。

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

      [2]韓超,梁泉.Android系統(tǒng)原理及開(kāi)發(fā)要點(diǎn)詳解[M].北京:電子工業(yè)出版社,2010.

      [3]靳巖,姚尚郎.Google Android開(kāi)發(fā)入門與實(shí)戰(zhàn)[M].北京:人民郵電出版社,2009.

      侯新琦(1992—),女,四川達(dá)州人,現(xiàn)就讀于四川大學(xué)軟件學(xué)院,研究方向:軟件工程。

      李佳(1991—),女,遼寧海城人,現(xiàn)就讀于四川大學(xué)軟件學(xué)院,研究方向:軟件工程。

      猜你喜歡
      四川大學(xué)內(nèi)核藍(lán)牙
      萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      藍(lán)牙音箱的直線之美
      四川大學(xué)西航港實(shí)驗(yàn)小學(xué)
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      簡(jiǎn)單、易用,可玩性強(qiáng)Q AcousticsBT3藍(lán)牙音箱
      適合自己的才是最好的 德生(TECSUN) BT-50藍(lán)牙耳機(jī)放大器
      緊急:藍(lán)牙指尖陀螺自燃!安全隱患頻出
      玩具世界(2017年8期)2017-02-06 03:01:38
      百年精誠(chéng) 譽(yù)從信來(lái)——走進(jìn)四川大學(xué)華西眼視光之一
      琼海市| 东港市| 林口县| 镇安县| 彩票| 阿图什市| 泾川县| 兴隆县| 托里县| 武山县| 乌拉特中旗| 饶平县| 湘潭县| 交口县| 阿坝县| 葫芦岛市| 定安县| 正定县| 阜阳市| 光山县| 竹溪县| 诸暨市| 门头沟区| 格尔木市| 宝应县| 新源县| 五寨县| 外汇| 德昌县| 东阿县| 探索| 内江市| 五家渠市| 新泰市| 哈尔滨市| 延寿县| 奉贤区| 鸡东县| 兴和县| 盐山县| 宽城|