我尝试创建一个 Android 应用程序来扫描使用 扩展广告 进行广告的蓝牙低功耗设备,并使用
Coded PHY
进行广告。
我有一个 nrf52840 外设,我已将其设置为使用 扩展广告 和
Coded PHY
进行广告,以便可以从远距离发现它。
在我的 Android 设备上,我可以使用 nRF Connect 应用程序发现 nrf52840 外围设备。
但是我无法从我的自定义 Android 应用程序中发现外围设备。
我已经设置了这些
ScanSettings
:
private val scanSettings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_BALANCED)
.setPhy(ScanSettings.PHY_LE_ALL_SUPPORTED)
.build()
我创建了一个简单的
ScanCallback
来记录找到的设备,找到了很多设备,但不是我使用 Coded PHY
的外围设备。我希望找到 nrf52840 外设。
private val scanCallback = object : ScanCallback() {
@SuppressLint("MissingPermission")
override fun onScanResult(callbackType: Int, result: ScanResult?) {
Log.d("BLE", "found bluetooth device " + result?.device?.address)
}
}
扫描码主要是查找BLE设备中的代码,但我用我的
ScanSettings
:
if (!isScanning) {
handler.postDelayed({
isScanning = false
bleScanner?.stopScan(scanCallback)
}, SCAN_PERIOD)
isScanning = true
bleScanner?.startScan(null, scanSettings, scanCallback)
} else {
isScanning = false
bleScanner?.stopScan(scanCallback)
}
我已将 SDK 版本设置为最低 Android 12。
使用 Android SDK 扫描 BLE 设备时,如何使用 Coded PHY
在
扩展广告上找到设备?它们可通过 nRF Connect 应用程序在同一设备上找到。
我成功了。
我将 .setLegacy(false) 添加到
ScanSettings
:
private val scanSettings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_BALANCED)
.setPhy(ScanSettings.PHY_LE_ALL_SUPPORTED)
.setLegacy(false)
.build()
现在它发现我的外围设备使用扩展广告和
Coded PHY
进行广告。
来自文档:
旧版广告包括蓝牙核心规范 4.2 及以下规范指定的广告。默认情况下,为了与旧应用程序兼容,这是正确的。
boolean:如果仅返回遗留广告,则为 true