본문 바로가기

안드로이드/Report

Cannot start unfiltered scan in screen-off. This scan will be resumed later 해결

블루투스 스캔을 사용하던 중 화면이 꺼져있는 경우, 아래와 같은 에러가 발생하였다.

'Cannot start unfiltered scan in screen-off. This scan will be resumed later'

 

원인은 뜻 그대로 필터링되지 않은 스캔은 화면이 꺼졌을 경우 시작할 수 없다.

추가로 삼성에서 제조한 스마트폰은 스캔 필터 리스트가 비어있을 경우 마찬가지의 에러가 발생하며, 그 외의 스마트폰에서는 빈 리스트만 넣어줘도 작동하는 것을 확인하였다.

 

해결 방법은 스캔시 필터를 걸어주면 된다. 아래는 예제 코드이다.

 

fun startScan(context: Context) {
        val bluetoothManager =
            context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
        val scanner = bluetoothManager.adapter.bluetoothLeScanner
        val scanSettings = ScanSettings.Builder().run {
            setScanMode(ScanSettings.SCAN_MODE_BALANCED)
            build()
        }
        val filters = mutableListOf<ScanFilter>()
        //스캔 필터 생성
        val scanFilter = ScanFilter.Builder().run {
        	//0x004C : iBeacon
            setManufacturerData(0x004C, byteArrayOf(), byteArrayOf())
            build()
        }
        //스캔 필터 추가
        filters.add(scanFilter)
        scanner.startScan(filters, scanSettings, object :ScanCallback(){
            override fun onScanFailed(errorCode: Int) {
                //스캔 에러 처리
            }

            override fun onScanResult(callbackType: Int, result: ScanResult?) {
                //스캔 결과 처리 (실시간 데이터)
            }

            override fun onBatchScanResults(results: MutableList<ScanResult>?) {
                //스캔 결과 처리 (이전 스캔 데이터)
            }
        })
    }

 

 

참고 링크:

https://stackoverflow.com/questions/48077690/ble-scan-is-not-working-when-screen-is-off-on-android-8-1-0/48079800