繁体   English   中英

在Nexus 4上使用Android 4.3进行蓝牙低功耗服务发现

[英]Bluetooth Low Energy Service Discovery with Android 4.3 on Nexus 4

我正在尝试使用我的nexus 4(android 4.3)的BLE模块(bluegiga BLE112)。 我可以连接,获取设备的名称,连接到GATT,但服务发现失败。

这是最初的gatt连接(它似乎成功运行:

dev.connectGatt(getBaseContext(), true, btGattCB);

这是关贸总协定的回调:

private BluetoothGattCallback btGattCB = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        super.onConnectionStateChange(gatt, status, newState);
        if(newState == BluetoothProfile.STATE_CONNECTED){
            Log.i(TAG, "Gatt Connected");
            gatt.discoverServices();
        }
        else if(newState == BluetoothProfile.STATE_DISCONNECTED){
            Log.i(TAG, "Gatt Disconnected");
        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status){
        Log.i(TAG,"Status onServiceDiscovered: "+status);   //status code i'm getting here is 129
        List<BluetoothGattService> btServices = gatt.getServices();//try anyway
    }
};

这是我的日志:

09-28 12:58:37.611    4118-4130/com.jnewt.btFive I/PDU? Scan Callback
09-28 12:58:37.611    4118-4130/com.jnewt.btFive I/PDU? Device is: 00:07:80:67:2F:63
09-28 12:58:37.611    4118-4130/com.jnewt.btFive I/PDU? Device Name: BGT GPIO Test
09-28 12:58:43.607    4118-4118/com.jnewt.btFive I/PDU? Scan Timeout
09-28 12:59:13.539    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 12:59:43.561    4118-4190/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 12:59:43.581    4118-4130/com.jnewt.btFive I/PDU? Gatt Disconnected
09-28 13:00:00.920    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 13:00:30.902    4118-4130/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 13:00:30.922    4118-4190/com.jnewt.btFive I/PDU? Gatt Disconnected
09-28 13:01:20.265    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 13:01:50.277    4118-4190/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 13:01:50.297    4118-4130/com.jnewt.btFive I/PDU? Gatt Disconnected
09-28 13:01:56.113    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 13:02:26.115    4118-4190/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 13:02:26.125    4118-4130/com.jnewt.btFive I/PDU? Gatt Disconnected

https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html页面中,我没有看到129被提及为可能的状态(没有一个常数匹配129)。

在这一点上,我完全没有想法。 我通过测试iphone的类似示例将问题隔离到Android手机。 我也尝试了在Play商店提供的几个应用程序,他们有类似的问题(可以连接,获取名称等,但没有服务)。

在Nexus 7上测试我的应用程序时,实际上今天得到了相同的错误代码。我的问题是,我在短时间内调用了2 X Gatt.connect。 也许这有助于你。 请注意,您不能在短时间内连接两次传感器设备。

来自BleConstants.java public static final int GATT_INTERNAL_ERROR = 129;

我在带有TI传感器标签的Nexus 7上进行了多次测试。

  1. Nexus 7(Android 4.3) - > 0x81 GATT_INTERNAL_ERROR
  2. 将Nexus 7升级到Android 4.4.2 - > 0x81 GATT_INTERNAL_ERROR
  3. 关闭WiFi,从未调用onServicesDiscovered
  4. 关闭并打开蓝牙,它的工作原理!
  5. 打开WiFi, onServicesDiscovered再次失败。
  6. 关闭WiFi,它再次工作。

我也在Galaxy S4(Android 4.3)上测试相同的程序,它始终运行良好。

因此,我认为Nexus 7上的BLE堆栈并不好。

如果你可以没有WiFi,它可能没问题,但如果你能找到其他一些Android 4.3设备,你应该尝试其他设备。

好吧,我有同样的问题。

检查BluetoothGATT中常量的二进制值我建议只是129表示失败。 也许,在定义常量时,有人误输了0,结果是257而不是129.(如果是状态代码总是查找二进制表示,则显示超过十进制值)

我绝对不会查看Android源代码,只是为了确定它是以二进制形式插入还是以小数形式插入。

   Binary    Dec
-----------  ---
0 1000 0001  129
1 0000 0001  257
0 0000 0101  5
0 0000 1111  15
0 0000 1101  13
0 0000 0111  7
0 0000 0110  6
0 0000 0000  0
0 0000 0011  3

不过,你需要一个解决方案吗? 对我来说重启电话-twice-帮助。 在第二次重启期间,我首先手动关闭蓝牙。

在发生错误之前,我已经以编程方式关闭并在我的应用程序的每次测试运行时重新激活蓝牙。 它近两个月完美无瑕。 然后我删除了“浪费时间”BT-restart-code,这个错误出现了,花了我半天才结账。

对我来说,Dedection时间从来都不是问题,设备会立即出现。

开发电话:Nexus 4 / Android 4.3(不断更新)BLE设备:德州仪器CC2541

如果我的BLE设备已经与我的手机配对,则会出现此错误。 一旦取消配对设备并再次发现服务,错误就会得到解决。

我使用TI-CC2541芯片得到了同样的错误。 解决方案是使用128kB芯片而不是256kB。 例如,“SimpleBLEPeripheral”是为128kB芯片制造的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM