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")
}
}
)
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
Мобильная версия