本文介绍了连接到 GATT 服务器时从未调用 onServicesDiscovered的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个与我的 Nexus 5X(运行 Android 7.1)配对的蓝牙耳机,我想连接到耳机的 GATT 服务器.我用下面的代码试了一下:

I have a bluetooth headset which is paired with my Nexus 5X (running Android 7.1) and I would like to connect to a GATT Server of the headset. I tried it with the following code:

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 被调用,它会出现这个日志输出:

If I click on the headset in my UI onDeviceClicked is called and it comes to this Log output:

<!-- language: lang-none -->
Connected to GATT: true
onConnectionStateChange: 0, 2    // GATT_SUCCESS, STATE_CONNECTED
Device connected
Discover Services started: true

如您所见,onServicesDiscovered 永远不会被触发.我试图用 TRANSPORT_LE (ref) 调用 connectGatt 但后来我得到一个 onConnectionStateChange: 133, 0.我还发现了这个问题,这就是我添加的原因答案二中提到的 gatt.connect() 方法.

As you can see onServicesDiscovered is never fired. I tried to call connectGatt with TRANSPORT_LE (ref) but then I get a onConnectionStateChange: 133, 0. I also found this question which is why I added the gatt.connect() method as mentioned in answer two.

你知道为什么我没有收到 onServicesDiscovered 回调吗?

Do you have any ideas why I don't get the onServicesDiscovered callback?

推荐答案

对我来说真正有用的是在连接建立后等待大约 600 毫秒,然后开始服务发现.

Something that has been really useful for me is to wait for about 600ms after the connection has been established and then start the service discovery.

这篇关于连接到 GATT 服务器时从未调用 onServicesDiscovered的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-26 12:49