首先我們要知道Ble是在android4.3被引入的
Ble開(kāi)發(fā)分為倆個(gè)設(shè)備
1.中心設(shè)備:中心設(shè)備就是我們的手機(jī)肺然,用來(lái)掃描和連接周邊設(shè)備舌厨。功能相對(duì)強(qiáng)大缀踪。
2.周邊設(shè)備:被中心設(shè)備連接以提供數(shù)據(jù)的,例如手環(huán)腾务、智能體溫計(jì)等,功能相對(duì)簡(jiǎn)單削饵,功耗較小岩瘦。
它應(yīng)該是在對(duì)建立連接的過(guò)程不同角色的一種區(qū)分未巫。我們知道藍(lán)牙設(shè)備要想讓別人知道自己的存在,是要不間斷的對(duì)外發(fā)送廣播的启昧,而另外一方則需要掃描并回復(fù)該廣播包叙凡,這樣才能建立連接,在這個(gè)過(guò)程中密末,負(fù)責(zé)廣播的就是peripheral握爷,而負(fù)責(zé)掃描的是Central。不過(guò)這些我們了解即可严里。
GATT協(xié)議:
? ? Ble是基于GATT進(jìn)行通信的新啼。GATT是一種屬性傳輸協(xié)議
一、權(quán)限配置:
? ??// 檢查手機(jī)是否支持BLE刹碾,不支持則退出
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this,"您的設(shè)備不支持藍(lán)牙BLE燥撞,將關(guān)閉", Toast.LENGTH_SHORT).show();
finish();
}
if (mBluetoothAdapter ==null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent,1);
}
二、獲取藍(lán)牙適配器:
? ? 1.通過(guò)getSystem(Context.BLUETOOTH_SERVICE)獲取到藍(lán)牙管理器迷帜。BluetoothManager物舒。
? ? 2.通過(guò)BluetoothManager.getAdapter();獲取到藍(lán)牙適配器。BluetoothAdapter戏锹。
三冠胯、掃描附近藍(lán)牙:
BluetoothAdapter.startLeScan(LeScanCallback);開(kāi)始掃描。
BluetoothAdapter.stopLeScan(LeScanCallback);停止掃描锦针。
? ?作為一個(gè)嚴(yán)謹(jǐn)?shù)馁Y深程序猿來(lái)講我們掃描前先通過(guò) BluetoothAdapter.stopLeScan(LeScanCallback);去停止掃描荠察。然后再調(diào)用startLeScan(LeScanCallback);開(kāi)始掃描。
四、鏈接到指定設(shè)備以及建立數(shù)據(jù)傳輸通道:
? ? 當(dāng)我們點(diǎn)擊當(dāng)前Item后通過(guò)當(dāng)前Item的藍(lán)牙地址獲取到當(dāng)前的藍(lán)牙設(shè)備也就是BluetoothDevice對(duì)象媚污。這個(gè)對(duì)象也是我們記性藍(lán)牙連接的主題要對(duì)象舀瓢。
????通過(guò)BluetoothDevice.connectGatt(Context context,boolean autoConnect,BluetoothGattCallback callback);連接到指定藍(lán)牙,具體每個(gè)參數(shù)的意義下圖有介紹耗美。
BluetoothGatt對(duì)象藍(lán)牙連接協(xié)議的總體類,通過(guò)這個(gè)類進(jìn)行的鏈接商架。???
?這里主要介紹BluetoothGattCallback 接口 他是連接成功后的回調(diào)堰怨,如果連接不成功是不會(huì)回調(diào)的。
在回調(diào)中主要有這么幾個(gè)方法:
? ?1. onConnectionStateChange();
在介紹第一個(gè)方法前先說(shuō)一下藍(lán)牙連接狀態(tài)碼
?????連接狀態(tài)的狀態(tài)碼分為四種
? ?/** 配置文件處于斷開(kāi)狀態(tài)蛇摸。 */
? ? public static final int STATE_DISCONNECTED? = 0;
? ? /** 配置文件處于連接-中-狀態(tài)备图。*/
? ?public static final int STATE_CONNECTING? ? = 1;
? ? /**? 配置文件處于連接狀態(tài)。 */
? public static final int STATE_CONNECTED? ? = 2;
? /** 配置處于斷開(kāi)狀態(tài)。 */
? ?public static final int STATE_DISCONNECTING = 3;
? ? 2.onServicesDiscovered()方法
/** 連接協(xié)議操作順利完成 */
public static final int GATT_SUCCESS =0;
? ??下面就是建立數(shù)據(jù)傳輸?shù)耐ǖ酪彩潜夭豢缮俚牟襟E
? ? 3.onCharacteristicRead():
????以上就是就BluetoothGattCallback 接口的三個(gè)主要方法酝锅。
? ? 連接建立了,服務(wù)也有了奢方,傳輸通過(guò)也有了搔扁,下面就給大家介紹怎么給藍(lán)牙發(fā)送數(shù)據(jù)。
? ? 藍(lán)牙一般接收的都是16進(jìn)制的byte[]數(shù)組蟋字。說(shuō)白了就是將我們對(duì)應(yīng)的字符串指令轉(zhuǎn)換成對(duì)應(yīng)的16進(jìn)制的byte[]數(shù)組稿蹲。藍(lán)牙內(nèi)部會(huì)將我們這個(gè)byte[]數(shù)組進(jìn)行解析識(shí)別我們所發(fā)送的指令進(jìn)行相對(duì)應(yīng)的操作。(至于字符串怎么轉(zhuǎn)成16進(jìn)制的byte[]數(shù)組鹊奖,下一篇文章我會(huì)介紹)
writeCharacteristic 方法的作用就是將給定的特性及其值寫(xiě)入相關(guān)聯(lián)的遠(yuǎn)程設(shè)備