如何使用 Android 扫描使用扩展广告和编码 PHY 的 BLE 设备?

问题描述 投票:0回答:1

我尝试创建一个 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 应用程序在同一设备上找到。

android kotlin bluetooth bluetooth-lowenergy android-ble
1个回答
0
投票

我成功了。

我将 .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

© www.soinside.com 2019 - 2024. All rights reserved.