我用BT低能能夠行李報警裝置(Link)工作,並已與我的Nexus 7HOWTO連接到藍牙LE設備上的Android(平臺19)
繼docs 我成功配對,現在想使用以下代碼連接到設備:
private BluetoothGattCallback callback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status,
int newState) {
Log.i(TAG, "le onConnectionStateChange ["+newState+"]");
if (newState == BluetoothProfile.STATE_CONNECTED) {
Log.i(TAG, "le device connected");
onConnect(gatt.getDevice());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
Log.i(TAG, "le device disconnected");
onDisconnect(gatt.getDevice());
}
}
@Override
public void onServicesDiscovered (BluetoothGatt gatt, int status) {
Log.i(TAG, "onServicesDiscovered");
}
};
for (BluetoothDevice device : BluetoothAdapter.getDefaultAdapter().getBondedDevices()) {
int type = device.getType();
if (type == BluetoothDevice.DEVICE_TYPE_LE || type == BluetoothDevice.DEVICE_TYPE_DUAL) {
List<BluetoothDevice> connectedDevices =
bluetoothManager.getConnectedDevices(BluetoothProfile.GATT);
if (!connectedDevices.contains(device)) {
BluetoothGatt gatt = device.connectGatt(App.getContext(), false, callback);
gatt.connect();
gatt.discoverServices();
List<BluetoothGattService> services = gatt.getServices();
}
}
}
但是,無法啓動連接。一段時間後(幾秒鐘),連接狀態 更改爲BluetoothProfile.STATE_DISCONNECTED - 即使BluetoothProfile.STATE_CONNECTED 未被達到。我在這裏做錯了什麼?
可以在未連接的情況下綁定設備。 gatt.connect()實際運行嗎?開始掃描更常見,以獲取可用設備的列表,而不是假設它已經連接。你也可以嘗試一下。 –
仔細看,它說!connectedDevices.contains(設備)。上面的代碼遍歷綁定設備列表,並嘗試與當前未連接的設備建立連接。循環中的代碼被運行,並且回調被調用,但是不用於BluetoothProfile.STATE_CONNECTED – fabian
除了上述評論之外,另一個可能的幫助是你不想調用discoverServices,而gattServices是序列化的。您希望等待每個回調,否則getServices將不會返回任何內容。我還注意到,您正試圖連接到通常使用RSSI檢測信號強度和距離的標籤,因此我不確定GATT服務器的定義有多好。 – Zomb