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

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());
}

如果我在用户界面中单击耳机,则会调用onDeviceClicked,它涉及以下日志输出:
<!-- language: lang-none -->
Connected to GATT: true
onConnectionStateChange: 0, 2    // GATT_SUCCESS, STATE_CONNECTED
Device connected
Discover Services started: true

如您所见,onServicesDiscovered从未触发。我试图用connectGatt(ref)调用TRANSPORT_LE,但是随后我得到了onConnectionStateChange: 133, 0。我还找到了this question,这就是为什么我添加了答案2中提到的gatt.connect()方法的原因。

您有什么主意,为什么我没有收到onServicesDiscovered回调?

最佳答案

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

关于android - 连接到GATT服务器时从未调用过onServicesDiscovered,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41434555/

10-09 09:40