잡동사니

반응형

질문

저는 Galaxy S10, android 10을 사용하고 있습니다. 여기 에서 삼성 기기를 사용한 BLE 스캔은 화면이 꺼진 상태에서 스캔하려면 비어 있지 않은 스캔 필터가 필요합니다.

아래는 내 AdvertiseData 및 ScanFilter 코드입니다.

ParcelUuid aaUuid = ParcelUuid.fromString("0000aa11-0000-1000-8000-00805F9B34FB");

AdvertiseData advertiseData = new AdvertiseData.Builder()
                .setIncludeDeviceName(true) 
                .addServiceUuid(aaUuid)
                .build();

ScanFilter scanFilter = new ScanFilter.Builder()
                .setServiceUuid(aaUuid)
                .build();

화면이 켜져 있으면 잘 작동합니다. 그러나 화면이 꺼지면 작동하지 않습니다.

이것을 확인하기 위해 10 회 스캔을 설정했습니다. 처음에는 화면을 켜면 잘 작동합니다. 화면이 꺼지면 첫 번째 스캔이 잘 작동합니다. 그러나 다음 스캔 결과가 나타나지 않고 다음 스캔 프로세스를 시작합니다 (결과없이).

각 스캔 반복에 대한 'WakeLock'은 동일한 결과를 만듭니다. 이 문제를 해결하는 방법?


추가 1. WorkManager를 사용하여 백그라운드 프로세스를 처리했습니다. 그런 다음 다른 방법을 찾고있었습니다.

2. 아래는 내 스캔 콜백 코드입니다.

private ScanCallback mScanCallback = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            if (result.getDevice().getName() != null)
                setBleScanResult(result);
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);
        }

        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
            Log.d("LOG_BLESCANNING_onScanFailed", "Error Code : " + errorCode);
        }
    };

추가 3. 화면이 꺼 졌을 때의 내 로그입니다.

...
D/Worker: ============ Bluetooth Scanning start ============
D/LOG_BluetoothScan: Bluetooth scanning started successfully
D/BluetoothAdapter: isLeEnabled(): ON
D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=4 mScannerId=0
D/BluetoothAdapter: isLeEnabled(): ON
D/LOG_BluetoothScan: Bluetooth scanning stopped
...

화면에

D/Worker: ============ Bluetooth Scanning start ============
D/LOG_BluetoothScan: Bluetooth scanning started successfully
D/BluetoothAdapter: isLeEnabled(): ON
D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=4 mScannerId=0
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/BluetoothAdapter: isLeEnabled(): ON
D/LOG_BluetoothScan: Bluetooth scanning stopped

추가 4. '왜이 문제가 BLE 스캐닝에서만 발생합니까?'가 궁금합니다. 화면이 꺼진 상태에서 광고를 확인하는데 문제가 없습니다.


추가 5. 광고도 문제가 있지만 필수는 아닙니다. MainActivity-Worker (WorkManager에서) 연결은이 상황을 제어하는 데 좋지 않습니다.


답변1

이것은 내 작업 코드입니다. 심지어 장치 화면이 잠겨 있습니다.

업데이트 :

" WorkerManager "를 사용했다고 언급 해 주셔서 감사합니다. 그 후 내 마음에 떠올랐다. Android 8부터 Google은 Doze 모드와 같은 배터리 최적화를 도입했습니다. 따라서 Sleep (잠자기 모드) 중에는 백그라운드에서 서비스를 실행할 수 없습니다. 그래서, 당신은 BLE 스캐닝을 할 수 있습니다 **

"포 그라운드 서비스"사용

** Worker 또는 Jobscheduler 대신

이 링크를 참조하십시오 :https://developer.android.com/training/monitoring-device-상태/잠자기대기

나도 2 년 전이 단계에서 고생했다. "Forgreound 서비스"로 전환 한 후 작동합니다.

OLD (초기화 관련-BLE 스캔)친절하게 코드를 확인하십시오. 이것은 간단합니다. 귀하의 응답을 기다리고 있습니다.

1. 스캔 필터 초기화

    btLeScanFilters = new ArrayList<ScanFilter>();
    ScanFilter scanFilter = new ScanFilter.Builder()
            .setServiceUuid(new ParcelUuid("........ uuid reference ......"))
            .build();
    btLeScanFilters.add(scanFilter);

2. 스캔 설정 초기화

    btLeScanSettings = new ScanSettings.Builder().

setScanMode (ScanSettings.SCAN_MODE_LOW_LATENCY) .build ();

3. 스캔 콜백 초기화

   private ScanCallback leScanCallback = new ScanCallback() {

    @Override
    public void onScanResult(int callbackType,
                             final ScanResult result){

        new TPMSAsyncTask().execute(result);
    }
   }

4. 스캔 시작

    btLeScanner.startScan(btLeScanFilters, 
               btLeScanSettings,
               leScanCallback);
        
   


 

 

 

 

출처 : https://stackoverflow.com/questions/63283352/android-ble-scan-with-screen-off-with-galaxy

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band