我有一個與我的Nexus 5X(運行Android 7.1)配對的藍牙耳機,並且我想連接到耳機的GATT服務器。我用下面的代碼試了一下:onServices在連接到GATT服務器時從未被調用
private BluetoothGattCallback btleGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
Log.d(TAG, "onConnectionStateChange: " + status + ", " + newState);
if(newState == STATE_CONNECTED) {
Log.d(TAG, "Device connected");
boolean ans = gatt.discoverServices();
Log.d(TAG, "Discover Services started: " + ans);
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.d(TAG, "Number of Services: " + gatt.getServices().size());
}
};
public void onDeviceClicked(BluetoothDevice device) {
BluetoothGatt gatt = device.connectGatt(this, false, btleGattCallback);
Log.d(TAG, "Connected to GATT: " + gatt.connect());
}
如果我點擊我的UI onDeviceClicked
耳機打電話,談到這個日誌輸出:
<!-- language: lang-none -->
Connected to GATT: true
onConnectionStateChange: 0, 2 // GATT_SUCCESS, STATE_CONNECTED
Device connected
Discover Services started: true
正如你可以看到onServicesDiscovered
是從來沒有發射。我試圖撥打connectGatt
與TRANSPORT_LE
(ref),但後來我得到一個onConnectionStateChange: 133, 0
。我還發現this question這就是爲什麼我加入了回答二中提到的gatt.connect()
方法的原因。
你有什麼想法,爲什麼我沒有得到onServicesDiscovered
回調?
在你的代碼示例中,你引用'mBluetoothGatt.discoverServices();'和一個局部變量'BluetoothGatt gatt = device.connectGatt(this,false,btleGattCallback);'?它可能不是同一個實例或設備嗎? – ayvazj
對不起,這是出於測試原因。我在上面的代碼中改變了它,但它也不起作用。 – Cilenco