藍(lán)牙4.0總結(jié)

搞了一段時間的藍(lán)牙摘悴,現(xiàn)在閑了下來,總結(jié)一下具體的流程舰绘。沉淀一下
接下來的流程中會涉及到一下幾個類,現(xiàn)在提前說明一下作用

BluetoothManager 藍(lán)牙管理類葱椭,用于獲取藍(lán)牙適配器捂寿,藍(lán)牙連接狀態(tài)
BluetoothAdapter 掃描,獲取藍(lán)牙設(shè)備的類
BluetoothGatt 管理遠(yuǎn)程藍(lán)牙設(shè)備內(nèi)部的service孵运,特征值
BluetoothDevice 藍(lán)牙設(shè)備的封裝類秦陋,用于獲取address,連接等作用
BluetoothAdapter.LeScanCallback 掃描設(shè)備的回調(diào)
BluetoothGattCallback 回調(diào)治笨,藍(lán)牙設(shè)備各種數(shù)據(jù)和狀態(tài)回調(diào)
BluetoothGattService 跑在遠(yuǎn)程藍(lán)牙設(shè)備中的服務(wù)
BluetoothGattCharacteristic 特征值 用于標(biāo)識可讀驳概,赤嚼,可寫,可發(fā)通知等屬性
BluetoothGattDescriptor 藍(lán)牙協(xié)議中的Descriptor
  1. :獲取設(shè)備顺又,更卒,

    • 獲取BluetoothAdapter

      • 兩種方式:BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
      • BluetoothAdapter.getDefaultAdapter();
    • 使用BluetoothAdapter掃描設(shè)備,這里需要傳入LeScanCallback 用于接收掃描到的設(shè)備

    public boolean startLeScan(LeScanCallback callback) { return startLeScan(null, callback); }

    • 在LeScanCallback中可以獲取到設(shè)備 BluetoothDevice 這個類封裝了關(guān)于遠(yuǎn)程藍(lán)牙設(shè)備的信息稚照,有mac地址蹂空,設(shè)備名字,設(shè)備別名等信息果录,最重要的適用于手機(jī)和藍(lán)牙設(shè)備建立連接
  2. 連接設(shè)備

    • 在這個方法中需要最重要的是傳入BluetoothGattCallback上枕,這個回調(diào)用于接受藍(lán)牙設(shè)備的連接狀態(tài)和數(shù)據(jù),連接成功后會返回一個BluetoothGatt 獲取service Characteristic Descriptor

        public BluetoothGatt connectGatt(Context context, boolean autoConnect,
            BluetoothGattCallback callback) {
                    return (connectGatt(context, autoConnect,callback, TRANSPORT_AUTO));
                }
      
    • 做完以上的步驟后連接藍(lán)牙已經(jīng)完成了弱恒,剩下的是監(jiān)聽和讀寫數(shù)據(jù)了

  3. 監(jiān)聽數(shù)據(jù) 上面提到BluetoothGattCallback 這個回調(diào)辨萍,用于接受藍(lán)牙設(shè)備的連接狀態(tài)和數(shù)據(jù),挑幾個比較常用的方法來說一下

    public abstract class BluetoothGattCallback {
    
    public void onConnectionStateChange(BluetoothGatt gatt, int status,
                                        int newState) {
    //連接狀態(tài)改變返弹,系統(tǒng)會調(diào)用這個方法分瘦,基本套路是這樣子的,
    調(diào)用mBluetoothGatt.discoverServices() 
    這個方法后就會回調(diào)onServicesDiscovered琉苇,如果不調(diào)用的話你就會痛苦的思考為什么 
    下面這個回調(diào)不走嘲玫。
        if (newState == BluetoothProfile.STATE_CONNECTED) {    
             mBluetoothGatt.discoverServices();
        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
           
        }
    }
    
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
    if (status == BluetoothGatt.GATT_SUCCESS) {
            //用于發(fā)現(xiàn)service并扇,BluetoothGattCharacteristic 去团,BluetoothGattDescriptor 這三個對象是監(jiān)聽數(shù)據(jù)的關(guān)鍵,決定你能不能讀寫數(shù)據(jù)和接收通知
            1.獲取硬件商提供好的服務(wù)
             BluetoothGattService RxService = mBluetoothGatt.getService(RX_SERVICE_UUID);                
            2.在服務(wù)中獲取特征值:
             BluetoothGattCharacteristic TxChar = RxService.getCharacteristic(TX_CHAR_UUID);
            3.在特征值中獲取描述
             BluetoothGattDescriptor descriptor = TxChar.getDescriptor(CCCD);

            上面的三個對象的獲取都是靠UUID來的穷蛹,藍(lán)牙協(xié)議已經(jīng)定義好一些UUID土陪,
            硬件廠商也會根據(jù)需要定義自己的UUID。
            UUID相當(dāng)于一個標(biāo)示符肴熏,用于獲取對象的數(shù)據(jù)或者對象鬼雀,可以自行百度一下UUID
        } else {
           
        }
    }
    
    
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic,
                                     int status) {
        //當(dāng)遠(yuǎn)程藍(lán)牙設(shè)備通過特征值來發(fā)送數(shù)據(jù)給手機(jī)的時候會回調(diào),這里就是真正獲取數(shù)據(jù)的地方之一蛙吏,需要注意的源哩,
        characteristic傳遞的是二進(jìn)制數(shù)據(jù),需要進(jìn)行轉(zhuǎn)換的鸦做。還有個很坑的地方励烦,這里我覺得并非運(yùn)行在主線程的,大家可以驗證一下
    }
    
     
    public void onCharacteristicWrite(BluetoothGatt gatt,
                                      BluetoothGattCharacteristic characteristic, int status) {
    // 寫數(shù)據(jù)的回調(diào)   
    }
    
    
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {

    //當(dāng)遠(yuǎn)程藍(lán)牙設(shè)備通過特征值來發(fā)送數(shù)據(jù)給手機(jī)的時候會回調(diào)泼诱,這里就是真正獲取數(shù)據(jù)的地方之一坛掠,
    }
  1. 總結(jié):因為目前公司的手環(huán)只用到了讀取數(shù)據(jù)的部分,寫數(shù)據(jù)部分還沒用到。等用到了再補(bǔ)一下屉栓,而且目前也是淺顯用了一下藍(lán)牙舷蒲,希望接下來有更多的機(jī)會可以用到藍(lán)牙,增加經(jīng)驗友多。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牲平,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子夷陋,更是在濱河造成了極大的恐慌欠拾,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骗绕,死亡現(xiàn)場離奇詭異藐窄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)酬土,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門荆忍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撤缴,你說我怎么就攤上這事刹枉。” “怎么了屈呕?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵微宝,是天一觀的道長。 經(jīng)常有香客問我虎眨,道長蟋软,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任嗽桩,我火速辦了婚禮岳守,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碌冶。我一直安慰自己湿痢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布扑庞。 她就那樣靜靜地躺著譬重,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嫩挤。 梳的紋絲不亂的頭發(fā)上害幅,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音岂昭,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛约啊,可吹牛的內(nèi)容都是我干的邑遏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恰矩,長吁一口氣:“原來是場噩夢啊……” “哼记盒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起外傅,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纪吮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萎胰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碾盟,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年技竟,在試婚紗的時候發(fā)現(xiàn)自己被綠了冰肴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡榔组,死狀恐怖熙尉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搓扯,我是刑警寧澤检痰,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站锨推,受9級特大地震影響铅歼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爱态,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一谭贪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锦担,春花似錦俭识、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至磁椒,卻和暖如春堤瘤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浆熔。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工本辐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓慎皱,卻偏偏與公主長得像老虫,于是被迫代替她去往敵國和親茫多。 傳聞我的和親對象是個殘疾皇子祈匙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容