【发布时间】:2020-10-17 13:20:01
【问题描述】:
我正在运行前台服务来扫描 ble 设备,当手机未锁定时该服务工作正常。但是当手机被锁定时,扫描仪无法检测到附近的任何设备。手机锁定时扫描计数始终为 0。我还为我的扫描仪添加了过滤器,但仍然没有运气。寻求帮助。
//adding filters of the manufacturer and the uuid
fun startScan(){
settings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build()
val builder = ScanFilter.Builder()
builder.setManufacturerData(0x004c, byteArrayOf())
val manufactureFilter= builder.build()
val uuidBuilder = ScanFilter.Builder()
val serviceUuidString = "f8c62883-xxxx-xxxx-xxxx-430326af8bd0"
val serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"
val parcelUuid: ParcelUuid = ParcelUuid.fromString(serviceUuidString)
val parcelUuidMask: ParcelUuid = ParcelUuid.fromString(serviceUuidMaskString)
uuidBuilder.setServiceUuid(parcelUuid, parcelUuidMask)
val uuidFilter = uuidBuilder.build()
filters = ArrayList<ScanFilter>()
filters.add(manufactureFilter)
filters.add(uuidFilter)
scanLeDevice(true)
}
//to start the ble scan for a short period
fun scanLeDevice(enable: Boolean) {
if (enable) {
Log.i(TAG, "Scanning started")
if(beaconCollectionTimer != null){
beaconCollectionTimer?.cancel()
}
beaconCollectionTimer = Timer()
beaconCollectionTimer?.schedule(object : TimerTask(){
override fun run() {
scanLeDevice(false)
}
}, SCANNING_INTERVEL)
bluetoothAdapter.getBluetoothLeScanner()
.startScan(filters, settings, mScanCallback)
} else {
Log.i(TAG, "scanning stopped")
if (bluetoothAdapter.getBluetoothLeScanner() != null) {
bluetoothAdapter.getBluetoothLeScanner().stopScan(mScanCallback)
}
isScanning = false
}
}
【问题讨论】:
-
但是我使用了第三方库,即使屏幕被锁定,它也能完成这项工作。问题在于,它没有检测到我创建的信标(其他使用蓝牙广播的手机)。它能够扫描和检测自己的物理信标。
-
这是什么手机品牌、型号和操作系统版本?如果您转到设置->应用程序->您的应用程序->权限->位置,您的应用程序被授予什么级别的位置权限?什么是有效的 3rd 方库?
-
位置权限始终存在
标签: android bluetooth-lowenergy beacon