2014-02-17 114 views
0

我用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 未被达到。我在这里做错了什么?

+0

可以在未连接的情况下绑定设备。 gatt.connect()实际运行吗?开始扫描更常见,以获取可用设备的列表,而不是假设它已经连接。你也可以尝试一下。 –

+0

仔细看,它说!connectedDevices.contains(设备)。上面的代码遍历绑定设备列表,并尝试与当前未连接的设备建立连接。循环中的代码被运行,并且回调被调用,但是不用于BluetoothProfile.STATE_CONNECTED – fabian

+0

除了上述评论之外,另一个可能的帮助是你不想调用discoverServices,而gattServices是序列化的。您希望等待每个回调,否则getServices将不会返回任何内容。我还注意到,您正试图连接到通常使用RSSI检测信号强度和距离的标签,因此我不确定GATT服务器的定义有多好。 – Zomb

回答

2

事实证明,我的代码毕竟是正确的。 显然,蓝牙堆栈已进入故障状态 ,只能通过将设备关闭 然后再次打开来恢复。

仅供参考:我有Nexus 7设备。第一版(我认为它在2012年底出来了 )和最近的一个。

蓝牙低功耗在2012 Nexus 7上不起作用。 (即使关闭再打开后也不会)。

这两款设备都运行Android 4.4.2。

我的结论,即蓝牙低能量不会在Nexus 7 2012 工作,是对当前的Nexus 7

如何很伤心,这是不稳定的。

+0

嗨fabian,你是能够解决这个问题,即使面临同样的情况。在5-6请求它进入newState == BluetoothProfile.STATE_DISCONNECTED但实际上它连接到设备。 –

+0

不幸的是没有。我对这个问题的判决是,现在仍然是蓝牙LE在Nexus 7设备上出现故障。 – fabian

+0

我谷歌,发现它与Android的问题。检查此链接https://code.google.com/p/android/issues/list?can=2&q=ble&colspec=ID+Type+Status+Owner+Summary+Stars&cells=tiles –

0

问题是,Android将只允许6个最大的蓝牙连接。当设备断开连接时,必须调用mBluetoothGatt.close()

+0

已停止它 – fabian