我正在使用BT低能耗行李提示装置(Link)并成功将其与我的Nexus 7配对。
关注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也是如此 从未到过。我在这里做错了吗?
答案 0 :(得分:2)
嗯,事实证明,我的代码毕竟是正确的。 显然蓝牙堆栈已进入故障状态 只能通过关闭设备来恢复 然后再打开它。
仅供参考:我有Nexus 7设备。第一版之一(我认为它出来了 在2012年底)和最近的一个。
Bluetooth Low Energy无法在2012款Nexus 7上运行。 (甚至在关闭然后再打开之后)。
这两款设备都运行Android 4.4.2。
我的结论是,Bluetooth Low Energy无法在Nexus 7 2012上运行 并且在当前的Nexus 7上不稳定。
这是多么可悲。
答案 1 :(得分:0)
问题是android只允许6个最大的蓝牙连接。当设备断开连接时,您必须调用mBluetoothGatt.close()