如何在 Kotlin 的 ble 扫描过滤器中使用设备名称
How to use device name in ble scan filter in Kotlin
我已经在这个问题上耗费了几个小时,似乎无法克服这个问题。我在一个旧的堆栈溢出 post(大约 5 年前)中看到,在 Android 中,对设备名称的 ble 扫描过滤被破坏了,所以你必须在每次返回的扫描中手动完成结果。我希望它现在已经修复,我只是犯了一个新手错误,有人可以很容易地发现它。
我正在使用 Kotlin 执行 ble 扫描。 当过滤器为 null 时,我的代码工作正常,但我无法使用设备名称(广告设备名称)作为过滤器来使其工作。 下面带有过滤器的代码可以编译,但是当我开始 ble 扫描时在我的 Nexus 7 平板电脑 (Android 6.0.1) 上崩溃(我只包含了我希望的内容与清晰相关)。
我正在使用以下代码(全部在 MainActivity.kt 中)为名为 "RCTL003":
的设备创建过滤器
import android.bluetooth.le.ScanFilter as LeScanFilter
// After the class declaration for MainActivity
// Here's the scanner.
private val bleScanner by lazy {
bluetoothAdapter.bluetoothLeScanner
}
// Here's the device name "RCTL003"
private val filter = LeScanFilter.Builder().setDeviceName("RCTL003").build()
private lateinit var devfilters: MutableList<LeScanFilter>
...
// I init devfilters just before I start the scan in my startBleScan function
devfilters.add(filter)
bleScanner.startScan(devfilters, scanSettings, scanCallback)
bleScanner.startScan 采用 ScanFilter 类型的可变列表:
startScan((Mutable)List<ScanFilter!>!, ScanSettings!, ScanCallback!) defined in android.bluetooth.le
任何指点将不胜感激!
吉姆
通过更改 devFilters 的定义方式,按设备名称扫描过滤器确实有效!
上面的 devFilters 应该定义为:
private devfilters: MutableList<LeScanFilter> = ArrayList()
我使用的是 23 的 minSdk。
我已经在这个问题上耗费了几个小时,似乎无法克服这个问题。我在一个旧的堆栈溢出 post(大约 5 年前)中看到,在 Android 中,对设备名称的 ble 扫描过滤被破坏了,所以你必须在每次返回的扫描中手动完成结果。我希望它现在已经修复,我只是犯了一个新手错误,有人可以很容易地发现它。
我正在使用 Kotlin 执行 ble 扫描。 当过滤器为 null 时,我的代码工作正常,但我无法使用设备名称(广告设备名称)作为过滤器来使其工作。 下面带有过滤器的代码可以编译,但是当我开始 ble 扫描时在我的 Nexus 7 平板电脑 (Android 6.0.1) 上崩溃(我只包含了我希望的内容与清晰相关)。
我正在使用以下代码(全部在 MainActivity.kt 中)为名为 "RCTL003":
的设备创建过滤器import android.bluetooth.le.ScanFilter as LeScanFilter
// After the class declaration for MainActivity
// Here's the scanner.
private val bleScanner by lazy {
bluetoothAdapter.bluetoothLeScanner
}
// Here's the device name "RCTL003"
private val filter = LeScanFilter.Builder().setDeviceName("RCTL003").build()
private lateinit var devfilters: MutableList<LeScanFilter>
...
// I init devfilters just before I start the scan in my startBleScan function
devfilters.add(filter)
bleScanner.startScan(devfilters, scanSettings, scanCallback)
bleScanner.startScan 采用 ScanFilter 类型的可变列表:
startScan((Mutable)List<ScanFilter!>!, ScanSettings!, ScanCallback!) defined in android.bluetooth.le
任何指点将不胜感激!
吉姆
通过更改 devFilters 的定义方式,按设备名称扫描过滤器确实有效!
上面的 devFilters 应该定义为:
private devfilters: MutableList<LeScanFilter> = ArrayList()
我使用的是 23 的 minSdk。