【问题标题】:Unable to run ble scanner when screen is locked屏幕锁定时无法运行 ble 扫描仪
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2017-03-15
    • 2018-02-27
    相关资源
    最近更新 更多