Android BLE发送超过20个字节(客户端未请求MTU)

时间:2019-02-18 16:19:53

标签: android server bluetooth-lowenergy byte gatt

我正在开发具有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(characteristic); 发送。

所以我在服务器端使用 mGattServer.notifyCharacteristicChanged(device,characteristic,false); 做过同样的事情,但是我在某个地方失败了(所以我将其删除了)

更多信息(也许没用):

Android客户端到iOS服务器:确定

iOS客户端到iOS服务器:确定

Android客户端到Android服务器:仅当我在客户端请求MTU但我不想这样做时,才可以。

iOS客户端到Android服务器:不好

0 个答案:

没有答案