背景
受到 https://www.jianshu.com/p/88858b8e5e67 的啓發,我明確了要發現ANCS服務需要在配對並綁定藍牙後。此文中的辦法是在 ios側使用 lightblue 模擬一個外設Heart Rate,讓Android 搜索連接它,然後觸發配對綁定,再接着搜索ANCS服務。操作起來還是比較繁瑣。
我期待的是:在ios 的【設置-藍牙】可以直接點擊Android手機藍牙設備名稱,能配對成功並同時android能訂閱ANCS。
簡化操作方式
-
首先需要Android手機作爲外設廣播數據,其中的一個GATT服務uuid必須是ios可見的,經過測試,HID的服務是可見的,uuid爲 1812 (00001812-0000-1000-8000-00805f9b34fb)
-
接着,在ios設置中,搜索藍牙的界面選中第一步android廣播出來的外設名稱,此時ios會去連接此android外設,將會進入BluetoothGattServerCallback的回調事件
-
在BluetoothGattServerCallback的已連接事件中,先關閉GattServer。接着判斷連接上的bt device(ios)是否已經綁定?
如果綁定:
mIphoneDevice.connectGatt(getApplicationContext(), false, mGattCallback);
如果未綁定:
try {
createBond(device.getClass(),device);
}catch (Exception e) {
e.printStackTrace();
}
//然後在綁定成功的廣播接收者中,調用mIphoneDevice.connectGatt(getApplicationContext(), false, mGattCallback);
-
此時android作爲外設的使命完成了,就是爲了拿到bt device並配對綁定。
-
android轉換角色爲中央設備,對上面的bt device展開搜索服務、訂閱通知等
-
接下來就是在ANCS的數據源,控制源,通知源中依據ANCS的協議進行顯示、控制、數據解析等等了
具體的demo見 github:https://github.com/billzbh/Androdi-testANCSDemo
demo我把ios通知的內容直接發到android的通知欄裏了,感覺也蠻有趣!!!