[安卓] 19、一個藍牙4.0安卓DEMO


 

 

 

一、工程結構&概述

 整個應用包含兩個按鈕,一個是搜索所有藍牙設備,另一個是連接所有藍牙設備~

下面是整個工程的文件結構:


 

二、代碼業務流程跟蹤

2.1、兩個按鈕

下面講講該工程里的主要跳轉流程及各部分功能:

ActivityMain:

onCreate函數中主要初始化兩個按鈕並對其綁定監聽事件:


 

2.1.1、第一個按鈕——藍牙搜索流程

點擊第一個按鈕執行scanLeDevice(true)函數:

這里99行的mHandler是產生一個異步的延時SCAN_PERIOD時間然后執行run中的部分的效果~

整體意思是:若傳入參數為true則啟動藍牙搜索,經過SCAN_PERIOD時間停止搜索;在搜索過程中可以調用該函數傳入false來強行終止搜索。

當調用startLeScan函數后進入藍牙搜索階段,該階段產生的一些藍牙信息都會被mLeScanCallback函數監聽到:

第126行把搜索到的藍牙設備放到mLeDeviceList中~


 

2.1.2、第二個按鈕——藍牙連接流程

2.1.2.1、藍牙連接流程——通過intent啟動DeviceControlActivity,轉到藍牙設備控制部分

點擊第二個按鈕執行btn2_click()函數:

該函數把mLeDeviceList中的藍牙信息通過intent傳給DeviceControlActivity,並啟動DeviceControlActivity~

在DeviceControlActivity的oncreate函數中:

第71行將ActivityMain中傳來的設備信息存儲到mDeviceName和mDeviceAddress數組中;

第77、78行啟動一個BluetoothLeService服務,並用bindService建立一個和藍牙服務之間的連接;

其中mServiceConnection函數類似於回調函數:監聽藍牙服務連接或斷開的信息


 

2.1.2.2、藍牙連接流程——在藍牙服務回調函數的onServiceCOnnected監聽中初始化藍牙服務,並建立遠程連接

在類似於回調函數的mServiceConnection中的第40行:當已經建立藍牙服務時,首先41行獲取藍牙服務對象、接着42行對藍牙服務初始化、最后47行調用connect函數將之前搜索到的設備地址和數量傳入函數,進行藍牙連接(連多個)

第42行初始化函數主要獲得藍牙適配器:

第47行connect函數用於連接遠程設備:

第214行對每一個遠程藍牙設備連接Gatt服務,其中mGattCallback是Gatt服務的回調函數(這里多個設備共用一個!)


 

2.1.2.3、藍牙連接流程——在Gatt服務的回調函數中解析藍牙消息,並通過廣播發送這些消息

在該回調函數中,對各種事件都是通過調用broadcastUpdate函數,將消息廣播出去(這樣在主activity中寫廣播監聽函數即可以實現與藍牙服務的數據溝通)

在該回調函數中重寫了連接狀態轉變監聽函數、服務搜索監聽函數、讀特征數據監聽、特征變化監聽函數。

broadcast有兩種:其中一種就是簡單的將action消息廣播出去

另一種是包含特征信息解析的廣播:

其中第123行是和傳感器數據測量的UUID進行比對,解析該特征是否是有關傳感器測量的。如果是,則對信息進行解讀~

第137行則是對其他非傳感器測量的特征進行處理

 

 

鏈接

ps:最初的是eclipse版本的,后來草草地做了個android studio版本,源代碼用處不大,本文在於梳理流程

link:http://pan.baidu.com/s/1i4nVe3z 

 

@beautifulzzzz 2016-02-014 continue~  
e-mail:beautifulzzzz@qq.com 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM