android -- 藍芽 bluetooth (一) 入門

來源:互聯網
上載者:User

標籤:

前段時間在 網上看了一些關於android藍芽的文章,發現大部分是基於老版本(4.1以前含4.1)的源碼,雖然無礙瞭解藍芽的基本原理和工作流程,但對著4.2.2的代碼看起來總是有些遺憾。所以針對4.2.2版本代碼整理下相關知識,當然藍芽工作的主幹流程是沒有變的,上電、載入驅動這些動作少不了的,只是這些功能的實現代碼位置變了不少。希望本文可以讓大家對android4.2的藍芽部分代碼有一個初步的瞭解。

 

        本文開始前,先明確代碼版本:android  jellyBean 4.2.2,後續的藍芽相關文章同樣如此。

        另推薦個源碼線上閱讀網址 http://androidxref.com/,已經知道的童鞋無視這行吧。

 

        入手一個新的模組或應用,當然首先要知道它都有什麼了,與它相關的代碼在那裡,所以先一起看下藍芽代碼分布吧。

 

1. 代碼分布:

 

    packages/apps/Bluetooth/     

         看這路徑肯定是藍芽應用方面的代碼了,主要是關於藍芽應用協議的表現代碼,包括opp、hfp、hdp、a2dp、pan等等,這些名詞後面再解釋。

    frameworks/base/core/java/android/server/  

          4.2以後這個目錄雖然還有了,但裡面代碼已經轉移到應用程式層了,就是前面那個目錄,所以4.2.2上的藍芽這裡可以忽略。

    framework/base/core/java/android/bluetooth  

           這個目錄裡的代碼更像一個橋樑,裡面有供java層使用一些類,也有對應的aidl檔案聯絡C、C++部分的代碼,還是挺重要的。

    kernel\drivers\bluetoothBluetooth    

           具體協議實現。包括hci,hid,rfcomm,sco,SDP等協議

    kernel\net\bluetooth Linux kernel

           對各種介面的Bluetoothdevice的驅動。例如:USB介面,串口等,上面kernel這兩個目錄有可能看不到的,但一定會有的。

    external\bluetooth\bluedroid      BlueZ (應用空間協議),官方藍芽協議棧。

    system\bluetoothBluetooth        適配層代碼,和framework那個作用類似,是串聯framework與blueZ的工具。

        大致代碼分布就是這些,初步查看後讓我們再來看下藍芽的整體結構。

 

2.整體結構:

        這部分直接了,看著直觀些。圖中把JNI部分雖然在目前4.2的代碼中在packages層,這裡還是畫在Framework層了,說明下希望

不要引起理解的誤會。從圖上可以感覺到整體流程和以前變化不大,所以流程方面的文章看4.1或更早的應該問題也不大。

 

 PS:關於藍芽協議棧的說明有誤,4.2裡已經不再是bluez了,在些更正一下,當然協議棧這一部分還是要有的,新的協議棧看下面英文:

 

Android 4.2 introduces a new Bluetooth stack optimized for use with Android devices. The new Bluetooth stack developed in 

collaboration between Google and Broadcom replaces the stack based on BlueZ and provides improved compatibility and reliability.

google和broadcom合作開發了一個新藍芽協議棧,老版本的相容性問題在所難免了。在此感謝網友andger032的提醒。

 

3.常用類和名詞解釋:  

   \packages\apps\Settings\src\com\android\settings\bluetooth 目錄下

 

     BluetoothEnabler.java   介面上藍芽開啟、關閉的開關就是它了, 

     BluetoothSettings.java  主介面,用於管理配對和串連裝置

     LocalBluetoothManager.java  提供了藍芽API上的簡單調用介面,這裡只是開始。

    CachedBluetoothDevice.java   描述藍牙裝置的類,對BluetoothDevice的再封裝

    BluetoothPairingDialog.java  那個配對提示的對話方塊

 

  /packages/apps/Phone/src/com/android/phone/

    BluetoothPhoneService.java  在phone的目錄肯定和電話相關了,藍芽接聽掛斷電話會用到這個

 

 /packages/apps/Bluetooth/src/com/android/bluetooth/btservice/

        AdapterService.java    4.2後才有的代碼,藍芽開啟、關閉、掃描、配對都會走到這裡,其實更準確的說它替代了4.1之前的BluetoothService.java,原來的工作就由這個類來完成了。說到這裡不能不說4.2藍芽的目錄變了,在4.1及以前的代碼中packages層的代碼只有opp協議相關應用的代碼,也就是檔案傳輸那部分,而4.2的代碼應用程式層的代碼則豐富了許多,按具體的藍芽應用協議來區別,分為以下檔案夾(這裡一併對藍芽一些名詞作個簡單解釋):

       a2dp    藍芽立體聲,和藍芽耳機聽歌有關那些,另還有個avrcp--音頻/視頻遠端控制設定檔,是用來聽歌時暫停,上下歌曲選擇的。
       btservice  這個前面AdapterService.java的描述大家應該能猜到一些,關於藍芽基本操作的目錄,一切由此開始。
       hdp      藍芽關於醫學方面的應用 Bluetooth Health Device Profile
       hfp       和電話相關,藍芽接聽、掛斷電話  Hands-free Profile
       hid      人機互動介面,藍芽滑鼠鍵盤什麼的就是這個了
      opp     不多解釋,以前就有。
      pan      描述了兩個或更多個 Bluetooth 裝置如何構成一個即時網路,和網路有關的還有序列埠功能(SPP),撥號網路功能(DUN)

      pbap    電話號碼簿訪問協議(Phonebook Access Profile)

       android 4.2的藍芽應用程式層部分代碼更豐富了,雖然有些目錄還沒具體代碼,不過說不準哪個版本更新就有了,就像4.0添加了hdp醫學那部分一樣。

另外原本在framework的JNI代碼也被移到packages/apps/bluetooth當中。     

 

   /frameworks/base/core/java/android/bluetooth/目錄下

 

      BluetoothA2dp.java A2DP的功能實現
     BluetoothAdapter.java 藍芽action的定義,虛擬設備屬性以及操作方法
     BluetoothAudioGateway.java 藍芽語音網關
     BluetoothClass.java 藍牙裝置類型的定義
     BluetoothDevice.java 藍牙裝置屬性
     BluetoothDevicePicker.java 定義遠程藍牙裝置的特性,比如需要認證,裝置類型
     BluetoothHeadset.java 定義藍芽headset功能的屬性以及介面
     BluetoothInputStream.java 藍芽流介面的實現(輸入資料流)
    BluetoothOutputStream.java 藍芽流介面的實現(輸出資料流)
    BluetoothServerSocket.java 藍芽socket服務端具備的方法
    BluetoothSocket.java 藍芽socket的封裝
    BluetoothUuid.java 藍芽uuid的定義以及uuid的解析

    以上java檔案在使用具體功能會用到,現在只是簡單描述下,至於具體使用在後續文章用到時再給出。同時代碼說明部分也就寫這些了

對於C、C++部分的代碼一方面沒看那麼多,另一方面根據android JNI的命名習慣,大家找起來也很容易。

 

 

4.後續分析:

       前面從整體上描述藍芽的基本知識,落實在具體的程式碼分析上,我們按幾個主線功能來走,藍芽的開關、搜尋配對、藍芽耳機與電話和檔案傳輸,

這幾個也算是藍芽的常用必備功能了,所以在後續文章中將按著這個順序來跟一下它們代碼調用流程。希望可以讓你快速的瞭解藍芽,當然如果有失誤

寫錯的地方,歡迎反饋,謝謝。

android -- 藍芽 bluetooth (一) 入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.