Android BLE Отправка более 20 байтов (без запроса MTU на стороне клиента) - PullRequest
0 голосов
/ 18 февраля 2019

Я занимаюсь разработкой приложения с функциями BLE.Мой сервер (периферийный) обнаруживает, что некоторые клиенты подключены к моему серверу.Я уведомляю их, отправляя информацию о каком-либо сервере, после чего клиент получает эту информацию, а затем отправляет информацию о клиенте.

Сервер

// Inside BluetoothGattServerCallback I receive the client, add him then try to send data to him
@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);

    addDevice(device);
    mHandlerBLE.post(() -> sendInfoServer(device));
}

private void sendInfoServer(BluetoothDevice device) {
    Random r = new Random();
    int nbr = r.nextInt(9999 - 1) + 1;

    JSONObject json = new JSONObject();
    json.put("ID", nbr + "");
    json.put("pic", "totootototototot");
    json.put("cover", "tututututututu");
    json.put("type", "VIP");
    json.put("address", "totoland 4th street");
    json.put("name", "Welcome Toto");

    byte[] data = StringUtils.bytesFromString(json.toString());
    notifyCharacteristic(data, CHARAC_CONNECTION_UUID, device);

    }

private void notifyCharacteristic(byte[] value, UUID uuid, BluetoothDevice device) {
        mHandlerBLE.post(() -> {

            BluetoothGattService service = mGattServer.getService(SERVICE_UUID);
            BluetoothGattCharacteristic characteristic = service.getCharacteristic(uuid);

            characteristic.setValue(value);
            characteristic.addDescriptor(CHARAC_DESCRIPTOR);

            mGattServer.notifyCharacteristicChanged(device, characteristic, false);

        });
    }

Мой вопрос: Можно ли УВЕЛИЧИТЬ (сервер-клиент) более 20 байтов?(notifyCharacteristicChanged)

Я видел так много кода, собирающегося разбить данные на порции и затем отправить его с mBluetoothGatt.writeCharacteristic (характеристикой); в цикле.

Таким образом, я сделал то же самое на стороне сервера с mGattServer.notifyCharacteristicChanged (устройство, характеристика, ложь); , но где-то произошел сбой (поэтому я его удалил)

Дополнительная информация (возможно, бесполезная):

Клиент Android на сервере iOS: ОК

Клиент iOS на сервере iOS: ОК

Клиент Android на сервере Android: ОК, только если я запрашиваю MTU на стороне клиента, но не могуне хочу.

Клиент iOS на сервере Android: НЕ ОК

...