问题描述
我有一个与我的 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!