android - 屏幕锁定时无法运行 ble 扫描仪

标签 android bluetooth-lowenergy beacon

我正在运行前台服务来扫描 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
        }
    }

最佳答案

在尝试了各种库以使我的扫描仪正常工作后,我意识到问题不在于代码,而在于电池保护程序。我所做的只是从电池优化应用程序列表中删除该应用程序,我的扫描仪开始按预期工作。即使屏幕锁定后,我也能够运行 bleScanner 并检测附近的设备。

关于android - 屏幕锁定时无法运行 ble 扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64402925/

相关文章:

java - ListView 中的 Android 日期格式

android - 如何在Android中显示录制时间?

bluetooth-lowenergy - iBeacons 的三角测量示例

javascript - 无法连接到蓝牙 LE 设备,DevicePairingResultStatus.Failed

ios - swift 4 iOS : Does not discover services of connected BLE device

audio - 试图在Swift的信标区域内合并声音

swift - 扫描特定 CBUUID IOS 时,核心蓝牙找不到外围设备(前台和后台)

android - 检索信标附件 proximity beacon api

java - 如何允许用户从 Android 中的联系人中选择一个或多个电话号码和/或电子邮件地址

android - 获取fragment中的android工具栏 subview