我研究了一个使用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,但没有问题。
您有解释或解决方案吗?
谢谢!