Расширенное несоответствие данных рекламы между рекламодателем и сканером на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Расширенное несоответствие данных рекламы между рекламодателем и сканером на Android

Сообщение Anonymous »

I am testing Bluetooth 5.0 Extended Advertising between two Samsung devices (both running Android 13, both supporting Extended Advertising with max payload 1650 bytes).
On the advertiser side, I am using BluetoothLeAdvertiser.startAdvertisingSet() with AdvertisingSetParameters Установлен для расширенного режима setlegacymode (false) .
, но пока не работаю, я не знаю, началась ли реклама или нет, но в обратном обращении она показывает, что реклама успешно началась, на стороне сканера название устройства также не показывается, я только что проверил с близким значением RSSI, чтобы обнаружить, что реклама не началась. Я также использовал свой собственный сканер и LightBlue.

Код: Выделить всё

INPUT Payload Data = "aaaaaaaaaaaaaaaaaaaaaa...." something like this [byte size=75]

val parameters = AdvertisingSetParameters.Builder()
.setLegacyMode(false) // Extended mode => ADV_EXT_IND + AUX_ADV_IND
.setConnectable(false)
.setScannable(false)
.setInterval(AdvertisingSetParameters.INTERVAL_HIGH)
.setTxPowerLevel(AdvertisingSetParameters.TX_POWER_HIGH)
.setPrimaryPhy(BluetoothDevice.PHY_LE_1M)   // Primary channel (ADV_EXT_IND)
.setSecondaryPhy(BluetoothDevice.PHY_LE_2M) // Secondary channel (AUX_ADV_IND)
.build()

//val longManufacturerData = ByteArray(100) { it.toByte() } // force AUX_CHAIN_IND
val message = "Boopathy  Mouli"
val data = AdvertiseData.Builder()
.addManufacturerData(0x1234, message.toByteArray(StandardCharsets.UTF_8))
.setIncludeDeviceName(true)
.build()

bluetoothLeAdvertiser?.startAdvertisingSet(
parameters,
data,
null,
null,
null,
object : AdvertisingSetCallback() {
override fun onAdvertisingSetStarted(
advertisingSet: AdvertisingSet?,
txPower: Int,
status: Int
) {
Log.d("BLE", "Started with status=$status")
}
}
)
код сканера: [/b]
val scanSettings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setLegacy(false) // Required for extended advertising
.setPhy(ScanSettings.PHY_LE_ALL_SUPPORTED) // Support primary 1M and secondary 2M
.build()

val scanFilter = listOf(
ScanFilter.Builder().build()
)

val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
val scanRecord = result.scanRecord
// Manufacturer Data decode
val mfgDataSparse = scanRecord!!.manufacturerSpecificData
for (i in 0 until mfgDataSparse.size()) {
val companyId = mfgDataSparse.keyAt(i)
val data = mfgDataSparse.valueAt(i)
val decodedString = data?.toString(Charsets.UTF_8)
Log.d("BLE", "Manufacturer ID: 0x${companyId.toString(16)}, Data: $decodedString")
}

// Service Data decode
val serviceDataMap = scanRecord.serviceData
for ((uuid, data) in serviceDataMap) {
val decodedString = data?.toString(Charsets.UTF_8)
Toast.makeText(this@BleExtendedCentralActivity, "Service UUID: $uuid, Data: $decodedString",
Toast.LENGTH_LONG).show()
Log.d("BLE", "Service UUID: $uuid, Data: $decodedString")
}

// Other info
Log.d(
"BLE",
"Device=${result.device.address}, RSSI=${result.rssi}, Connectable=${result.isConnectable}"
)
}

override fun onBatchScanResults(results: MutableList) {
for (result in results) {
onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES, result)
}
}

override fun onScanFailed(errorCode: Int) {
Log.e("Central", "Scan failed with error $errorCode")
}
}

scanner?.startScan(scanFilter, scanSettings, scanCallback)
Log.d("Central", "Started extended advertising scan")
< /code>
журнал кода сканера: < /strong>
service uuid: 0000fef3-0000-1000-8000-00805f9b34fb,

data: j#kx1w2���� j�0z� мг. Rssi = -47, confectable = true
Проблема:

при сканировании с использованием оба:
Мое собственное приложение сканера (используя Bluetoothlescanner.StartScan () с scansettings.scan_low_lates /> Сторонние приложения, такие как lightblue
рекламные данные не соответствуют , что было отправлено.
Например:
ожидаемый сервис UUID: 0000180d-0000-1000-8000-0080808080808080808080.0080808080.00808080.0080808080808080808080.100-008080808080. />
полученный сервис UUID: < /strong> 0000FEF3-0000-1000-8000-00805F9B34FB (совершенно другой). < /p>
В LightBlue, основной пакет ADV показывает только адрес /указатель, и фактическая полезная нагрузка во втором пакете, похоже, отсутствует или заменяется. Или я не знаю, что реклама правильно началась или нет
скриншоты:

LightBlue Вывод показывает Adv. Пакет с длинной шестнадцатеричной строкой, но неправильным UUID.
Мои журналы сканера показывают то же самое неправильный UUID (пример: Device = 49: A7: E4: 9C: 14: 50, сервис UUID: 0000FEF3…). src = "https://i.sstatic.net/ollg7oq1m.png"/>

strongtion> ebstractions:
  • Оба устройства Samsung, Android 13, BLE 5.0+ и ISleexTendEdAdsInsingSupported () возвращает true. < /li>
    Я могу отправлять нормальные (наследие) рекламные данные без проблем. Пакеты.

Вопросы:


Это известная ошибка Samsung или Android BLE Stack, где вторичные данные пакетов заменяются или усекают? /> Существует ли какая -либо конкретная конфигурация сканирования или разрешений, необходимая для обеспечения полной расширенной рекламной нагрузки?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... on-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»