Nexus 9 в периферийном режиме не принимает соединение от клиентов или не отвечает на запросы клиентов?

Я использую Nexus 9 в периферийном режиме. Я создал экземпляр сервера GATT:

mGattServer = mBluetoothManager.openGattServer(this, mBluetoothGattServerCallback);

Я создал BluetoothGattService & BluetoothGattCharacteristic. Добавлен сервис на сервер GATT и характеристика сервиса.

BluetoothGattService service =new BluetoothGattService(SERVICE_UUID,
            BluetoothGattService.SERVICE_TYPE_PRIMARY);

BluetoothGattCharacteristic offsetCharacteristic =
            new BluetoothGattCharacteristic(CHARACTERISTIC_NUM_UUID,
                    //Read+write permissions
                    BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE,
                    BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);

service.addCharacteristic(offsetCharacteristic);

mGattServer.addService(service);

Экземпляр BluetoothGattServerCallBack:

private BluetoothGattServerCallback mBluetoothGattServerCallback = new BluetoothGattServerCallback() {
    @Override
    public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
        //super.onConnectionStateChange(device, status, newState);
        Log.i(TAG, "onConnectionStateChange "
                + getStatusDescription(status) + " "
                + getStateDescription(newState));

        if (newState == BluetoothProfile.STATE_CONNECTED) {
            Log.i(TAG, "Connected..");

        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            Log.i(TAG, "Disconnected..");
        }
    }

    @Override
    public void onServiceAdded(int status, BluetoothGattService service) {
        //super.onServiceAdded(status, service);
        Log.i(TAG, "onServiceAdded");
    }

    @Override
    public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId, BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) {
        super.onCharacteristicWriteRequest(device, requestId, characteristic, preparedWrite, responseNeeded, offset, value);
        Log.i(TAG, "onCharacteristicWriteRequest");
    }

    @Override
    public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, int offset, BluetoothGattCharacteristic characteristic) {
        super.onCharacteristicReadRequest(device, requestId, offset, characteristic);
        Log.i(TAG, "onCharacteristicReadRequest");
    }

    @Override
    public void onDescriptorReadRequest(BluetoothDevice device, int requestId, int offset, BluetoothGattDescriptor descriptor) {
        super.onDescriptorReadRequest(device, requestId, offset, descriptor);
        Log.i(TAG, "onDescriptorReadRequest");
    }

    @Override
    public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) {
        super.onDescriptorWriteRequest(device, requestId, descriptor, preparedWrite, responseNeeded, offset, value);
        Log.i(TAG, "onDescriptorWriteRequest");
    }

    @Override
    public void onExecuteWrite(BluetoothDevice device, int requestId, boolean execute) {
        super.onExecuteWrite(device, requestId, execute);
        Log.i(TAG, "onExecuteWrite");
    }

    @Override
    public void onNotificationSent(BluetoothDevice device, int status) {
        super.onNotificationSent(device, status);
        Log.i(TAG, "onNotificationSent");
    }
};

Теперь, когда я пытаюсь подключить клиент GATT к этому серверу, метод onConnectionStateChange () BluetoothGattServerCallback никогда не вызывается.

Код из клиентского приложения:

Чтобы подключиться к серверу GATT на Nexus 9

mConnectedGatt = device.connectGatt(this, false, mGattCallback); 

Экземпляр BluetoothGattCallback:

private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {

    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) {
            Log.i(TAG, "Connected to server");
            gatt.discoverServices();
        } else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED) {
            Log.i(TAG, "Disconnected from server");
        } else if (status != BluetoothGatt.GATT_SUCCESS) {
            gatt.disconnect();
        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {         
    }

    @Override
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {        
    }

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {         
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { 
    }

    @Override
    public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {

    }
};

Устройство (Nexus 9) можно обнаружить, и я получаю его через onLeScan (). Но когда я пытаюсь подключиться к серверу GATT, работающему на Nexus 9, статус в onConnectionStateChange всегда STATE_DISCONNECTED.

Я пытался подключиться из сторонних приложений, таких как «B-BLE», «BLE Scanner», «Bluetooth 4.0 Explorer». В этих приложениях можно обнаружить Nexus 9, но когда я пытаюсь подключиться к серверу GATT, статус в onConnectionStateChange () всегда равен STATE_DISCONNECTED.

Мы будем благодарны за любую помощь.

Заранее спасибо.


person Kailash Kishore Ahirwar    schedule 13.02.2015    source источник
comment
Удалось ли вам решить эту проблему, и у меня такая же?   -  person Tristian    schedule 26.11.2015


Ответы (1)


В качестве первого шага проверьте, возвращает ли метод addService (..) значение true - только тогда служба успешно добавлена.

Также попробуйте удалить проверку GATT_SUCCESS из метода onConnectionStateChange (). Насколько я знаю, вам не нужно там проверять это ...

person origami addict    schedule 28.08.2015