BluetoothGatt.getService (<uuid>) возвращает ноль, когда я знаю, что устройство предлагает указанный сервис на указанном uuid - PullRequest
0 голосов
/ 22 мая 2019

Иногда (слишком часто) после подключения к устройству и вызова DiscoverServices () и ожидания вызова onServicesDiscovered () при попытке получить BluetoothGattService для указанного UUID возвращает ноль.

        @Override
        public void onServicesDiscovered(final BluetoothGatt gatt, int status) {
            EDLogger.e(this, "onServicesDiscovered");

            if (status == BluetoothGatt.GATT_SUCCESS) {
                mEDServiceHandler.postAtFrontOfQueue(() -> {
                    if (gatt.getServices() == null) {
                        Log.d(TAG, "GATT returned NULL services");
                        return;
                    }

                    // *** this is the call that often returns null ***
                    BluetoothGattService service = gatt.getService(UUID.fromString(myServiceUUID));

                    if (service == null) {
                        Log.d(TAG, "Service is NULL in onServicesDiscovered");
                        return;
                    }

                    BluetoothGattCharacteristic characteristic = service.getCharacteristic(UUID.fromString(EDAttributes.getDataPacket()));

                    if (characteristic != null) {
                        mNotifyCharacteristic = characteristic;
                        setCharacteristicNotification(characteristic, true);
                    }
                });
            }
        }

UUID правильный, и в конечном итоге вышеуказанный код будет работать, но часто, например, сразу после включения устройства, вызов getService (), приведенный выше, возвращает ноль.Я знаю, что устройство предлагает эту услугу, потому что 1.) оно работает на iOS и 2.) если я отключаюсь (вызываю BluetoothGatt.disconnect (), жду STATE_DISCONNECTED, затем вызываю BluetoothGatt.close ()) и подключаюсь достаточно часто,getService () в конечном итоге вернет реальный сервис.Я не знаю, что я делаю не так.Любое понимание, безусловно, ценится!

...