我有一个与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/