Код: Выделить всё
Device supports extended advertising.Total Possible Length: 192
Service Data: Key: 0000180d-0000-1000-8000-00805f9b34fb, Value Size: 28 bytes, Total Size: 46 bytes (UUID: 16 + Value: 28 + Overhead: 2)
Flags: Fixed Size: 3 bytes
Total Advertisement Size: 49 bytes
Advertisement data is too large.
Действия, которые я предпринял:
- Подтвержденная расширенная рекламная поддержка
Код: Выделить всё
if (bluetoothAdapter?.isLeExtendedAdvertisingSupported == true) {
Код: Выделить всё
Log.d("Dharmik", "Device supports extended advertising.")
Код: Выделить всё
} else {
Код: Выделить всё
Log.e("Dharmik", "Device does NOT support extended advertising.")
Код: Выделить всё
}
- Проверена максимальная длина рекламных данных
Код: Выделить всё
val totalLength = bluetoothAdapter?.leMaximumAdvertisingDataLength
Код: Выделить всё
Log.d("Dharmik", "Total Possible Length: $totalLength")
< ol start="3">
[*]Настроенные параметры рекламы для расширенной рекламы:
Код: Выделить всё
val settings = AdvertiseSettings.Builder()
Код: Выделить всё
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
Код: Выделить всё
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
Код: Выделить всё
.setConnectable(false)
Код: Выделить всё
.build()
Код: Выделить всё
val serviceUUID: UUID = UUID.fromString("0000180D-0000-1000-8000-00805F9B34FB")
Код: Выделить всё
val staticMessage = "123456789012345678901234567" // 27 bytes
Код: Выделить всё
val serviceData = staticMessage.toByteArray()
Код: Выделить всё
val data = AdvertiseData.Builder()
Код: Выделить всё
.addServiceData(ParcelUuid(serviceUUID), serviceData)
Код: Выделить всё
.setIncludeTxPowerLevel(false)
Код: Выделить всё
.build()
Благодаря 27-байтовому статическому сообщению реклама работает отлично. Однако добавление 1 дополнительного байта (всего 28 байт) приводит к следующей ошибке:
Код: Выделить всё
E/Dharmik: Advertisement data is too large
- Обработка обратного вызова
Код: Выделить всё
private val advertiseCallback = object : AdvertiseCallback() {
Код: Выделить всё
override fun onStartSuccess(settingsInEffect: AdvertiseSettings) {
Код: Выделить всё
Log.d("Dharmik", "Advertising started successfully.")
Код: Выделить всё
}
Код: Выделить всё
override fun onStartFailure(errorCode: Int) {
Код: Выделить всё
when (errorCode) {
Код: Выделить всё
ADVERTISE_FAILED_DATA_TOO_LARGE -> {
Код: Выделить всё
Log.e("Dharmik", "Advertisement data is too large.")
Код: Выделить всё
}
Код: Выделить всё
// Other cases...
Код: Выделить всё
}
Код: Выделить всё
}
Код: Выделить всё
}
- < li>Протестированные устройства:
- Realme 6i (Realme RMX2002) — Android 11.
- Samsung S24 — Android 14.
< li>Библиотека BLE: API-интерфейсы Android по умолчанию (например, AdvertiseSettings, AdvertiseData)
2.Возможно ли, что устройство или прошивка имеют ограничения на расширенную рекламу, несмотря на заявленную поддержку?
3.Как я могу отладить или устранить эту ошибку, чтобы разрешить более крупные пакеты рекламы?`< /п>
Подробнее здесь: https://stackoverflow.com/questions/792 ... ite-extend