Как я могу разместить рекламу через BLE 100 байт? - PullRequest
0 голосов
/ 05 февраля 2019

Как я могу разместить рекламу через BLE 100 байтов?
SDK> = 26
Я могу рекламировать 20 байтов, но когда я рекламирую более 20 байтов, я получаю исключение.

Я уже читал эти статьи:
Android: отправка данных> 20 байт по BLE
Как отправить более 20 байтов данных через Android в Android?

Как я правильно понимаю, упомянутые ссылки не являются решением для рекламы, но для P2P-соединений, я прав?

Мой код:

     private fun startAdvertising() {
        goForeground()

        Log.d(tag, "Service: Starting Advertising")

        if (mAdvertiseCallback == null) {
            val settings = buildAdvertiseSettings()
            mAdvertiseCallback = SampleAdvertiseCallback()

            if (mBluetoothLeAdvertiser != null) {
                mBluetoothLeAdvertiser!!.startAdvertising(settings, data, mAdvertiseCallback)
            }
        }
    } 

private fun buildAdvertiseData(): AdvertiseData {
        val advertisingData = AdvertiseData.Builder()
        val uuid = BeaconWiliot.manufactureUuid
        advertisingData.addServiceUuid(uuid)
        advertisingData.setIncludeDeviceName(false)
        advertisingData.addServiceData(uuid, ByteArray(20))
        return advertisingData.build()
    }

1 Ответ

0 голосов
/ 07 февраля 2019

Вы не можете.

Максимальная длина рекламного пакета составляет 31 байт.Кроме того, вы можете реализовать ответ сканирования.
Размер MTU пакетов BLE согласовывается после установления соединения и не имеет никакого отношения к размеру объявления.

Этот ответ на сканирование подобен расширению данных объявления:
Ваше устройство передает объявление,Если сканирующее устройство заинтересовано, оно может запросить ответ сканирования.Ответ на сканирование может содержать более или менее те же данные в объявлении, а также может содержать 31 байт.
Как правило, добавление данных в ответ на сканирование выполняется несколько медленнее, поскольку необходимо выполнить новый запрос.С точки зрения пользователя, это почти не имеет значения.

В общей сложности это составляет 62 байта.Обычно эти 62 байта содержат такие данные, как имя и некоторые флаги, такие как «BLE_FLAGS_GENERAL_DISCOVERABLE_MODE» (имя зависит от реализации), а также некоторые накладные расходы для маркировки типа и длины данных.

(Кстати: я незнаю, почему 31 и обычные пакеты с 20-байтной полезной нагрузкой ...)

Конечно, вы можете изменять рекламные данные во время выполнения и передавать новые данные в каждом рекламном объявлении.Сканирующее устройство пропустит большинство рекламных объявлений, поэтому вы можете регулярно осуществлять ретрансляцию и т. Д. И т. Д. Но это не то, для чего предназначена реклама.

Как я правильно понимаю, упомянутые ссылкинет решения для рекламы, но для P2P-соединений, я прав?

Да.В P2P-соединении вы можете фрагментировать данные по нескольким пакетам или лучше увеличить размер MTU для отправки больших блоков данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...