使用BLE扫描的扫描过滤器

时间:2019-07-17 14:31:22

标签: android kotlin bluetooth-lowenergy samsung-mobile

我研究了一个使用BLE扫描到前台服务的应用程序。 我使用Android RxBle库执行扫描。

private fun scanBleDevices(): Observable<ScanResult>? {
    val rxBleClient = RxBleClient.create(this)
    val scanSettings = ScanSettings.Builder()
        .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
        .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
        .build()

    val scanFilter = ScanFilter.Builder()
        //.setServiceData(ParcelUuid.fromString("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"), ByteArray(1))
        //.setDeviceAddress("XX:XX:XX:XX:XX:XX")
        .build()

    return rxBleClient.scanBleDevices(scanSettings, scanFilter)
}

private fun startScan(){
    Timber.e("Start SCAN")
    scanBleDevices()?.let {
        it.observeOn(AndroidSchedulers.mainThread())
            .subscribe({ scanResult ->
                //Handle scan result
            }, {
                Timber.e("Scan failed")
            })
    }
}

我使用ScanFilter以便在手机屏幕锁定时获得扫描结果。

当我将ScanFilter与mac地址一起使用时,效果很好,但这不是真正的解决方案,因为我不想为所有信标指定所有mac地址。

因此,我尝试将ScanFilter与服务数据ID一起使用,除锁定手机屏幕外,它均有效。 问题仅在于当我将我的应用与三星设备一起使用时,因为我有Pixel 3,但没有问题。

您有解释或解决方案吗?

谢谢!

0 个答案:

没有答案