Android低功耗藍芽(藍芽4.0)——BLE開發(上)

來源:互聯網
上載者:User

標籤:手機app   code   藍芽4.0   方法   使用   boolean   開始   admin   mha   

段時間,公司項目用到了手機APP和藍牙裝置的通訊開發,這裡也正好對低功耗藍芽(藍芽4.0及以後標準)的開發,做一個總結。

藍芽技術聯盟在2010年6月30號公布了藍芽4.0標準,4.0標準在藍芽3.0+HS標準的基礎上增加了對低功耗藍芽(BLE)的支援。相比原有的普通藍芽和高速藍芽,BLE最大的特點就是低功耗,低延時,快速的搜尋和連線速度,但資料轉送速度相比傳統藍芽低。接下去將從BLE的概念以及代碼兩個方面介紹Android下的BLE。

先來說說基本概念:

1.BLE相關概念

1.1 GATT、Service、Characteristic、Descriptor

BLE開發,經常會與四個概念發生關係:GATT、Service、Characteristic、Descriptor

 

  • GATT:是藍芽4.0特有的Profile通用規範,BLE應用的Profile均基於GATT。Gatt定義了一個服務架構規範,該架構套件括對藍芽服務(Service)和服務特性(Characteristic)的定義和規範,和其中讀寫、通知的特性等。可以將GATT理解成BLE架構,我們在GATT上面實現BLE功能。
  • Service:是完成一個特定功能的資料和行為集合。在Gatt中,一個Service可能包含Service引用以及強制或者可選的Characteristic。
  • Characteristic:也叫特徵值,一個Characteristic的定義包含了Characteristic本身,數值以及描述(Descriptor)的聲明。Characteristic是完成BLE具體功能的基本單位。
  • Descriptor:Descriptor定義了Characteristic中資料的具體含義。

  總的來說,一個藍芽4.0的終端可以包含多個Service,一個Service可以包含多個Characteristic,一個Characteristic包含一個Value和多個Descriptor,一個Descriptor包含一個Value

 

 

 

 

 

 

 

 

1.2 中央(Central)與周邊(Periphery)

在BLE協議中,有兩個角色,周邊(Periphery)和中央(Central):

周邊是資料提供者,中央是資料使用/處理者;在iOS SDK裡面,可以把一個iOS裝置作為一個周邊,也可以作為一個中央;但是在Android SDK裡面,Android手機只能作為中央來使用和處理資料;那資料從哪兒來?從BLE裝置來,現在的很多穿戴式裝置都是用BLE來提供資料的。

 

一個中央可以同時串連多個周邊,但是一個周邊某一時刻只能串連一個中央。

那麼問題來了,如何定義周邊和中央?

關於周邊和中央,涉及到四個類:

  • BluetoothGattServer:作為周邊來提供資料
  • BluetoothGattServerCallback:返回周邊的狀態
  • BluetoothGatt:作為中央來使用和處理資料
  • BluetoothGattCallback:返回中央的狀態和周邊提供的資料。、

關係下:

2. 開發Ble

瞭解了那些基礎概念後,我們就正式開始開發ble。

Ble的Android開發,主要是以下的幾個步驟:

1、添加許可權

2、掃描Ble裝置

3、串連Ble裝置

4、資料通訊

 

 那麼現在,開始一步步來完成。

2.1 添加許可權:

在AndroidManifest.xml中添加Ble需要的許可權,其實就兩個:

<!-- 應用使用藍芽的許可權 --><uses-permission android:name="android.permission.BLUETOOTH" /><!-- 掃描藍牙裝置或者操作藍芽設定 --><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

2.2 檢查是否裝置是否支援藍芽,並開啟藍芽

檢查裝置是否支援藍芽

     /**     * 檢查該裝置是否支援藍芽     */    public void isBle(Context context) {        //手機硬體支援藍芽        if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {            ViewUtils.getInstance().showToast("該裝置不支援BLE,即將離開改頁面");        }    }

開啟手機藍芽開關

    private BluetoothAdapter mBluetoothAdapter;//藍芽適配器    //開啟藍芽許可權    if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {         Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);         startActivityForResult(enableBtIntent, What.Bluetooth.bluetoothEnable);   }

2.3 掃描裝置

 開始掃描和停止掃描,只需要調用對應的startLeScan()和stopLeScan()即可,但是需要將LeScanCallBack作為參數:

    // 逾時時間    private static final long SCAN_PERIOD = 10000;    ...    private void scanLeDevice(final boolean enable) {        if (enable) {            // 達到逾時時間,停止掃描            mHandler.postDelayed(new Runnable() {                @Override                public void run() {                    mScanning = false;                    mBluetoothAdapter.stopLeScan(mLeScanCallback);                }            }, SCAN_PERIOD);            //開始掃描            mBluetoothAdapter.startLeScan(mLeScanCallback);        } else {            //停止掃描            mBluetoothAdapter.stopLeScan(mLeScanCallback);        }        ...    }

LeScanCallBack的實現:

private BluetoothAdapter.LeScanCallback mLeScanCallback =        new BluetoothAdapter.LeScanCallback() {    @Override    public void onLeScan(final BluetoothDevice device, int rssi,            byte[] scanRecord) {        runOnUiThread(new Runnable() {           @Override           public void run() {               // TODO: 2017/9/18             }       });   }};

上面的代碼中:

  • SCAN_PERIOD:掃描時間長度,毫秒數,需要注意的是,藍牙裝置掃描很耗電,這個時間不易設定太長,在掃描成功後就要停止裝置掃描。
  • BluetoothDevice:藍牙裝置的相關類,通過他,可以擷取藍牙裝置的很多資訊

 如果只想掃描指定類型的外圍裝置,你可以調用startLeScan(UUID[], BluetoothAdapter.LeScanCallback),提供一個指定了你app支援的GATT服務的UUID數組對象。

 2.3 串連GATT服務端

與BLE裝置通訊的前提就是串連GATT服務端,GATT概念之前已經講過了,調用connectGatt()就可以了,不過需要三個參數:這個方法需要三個參數,一個Context對象,autoConnect(一個指示是否自動連接到BLE裝置--當它一旦可用的時候--的布爾值),和一個 BluetoothGattCallback的引用:

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

這個方法會返回一個BluetoothGatt,用它可以對GATT進行操作。

具體怎麼操作呢?下篇部落格再說。

這是我的個人公眾號:感興趣的可以關注一下,裡面分享一些搞機視頻,程式員嘛!學會騷,很重要:

 

Android低功耗藍芽(藍芽4.0)——BLE開發(上)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.