bluetooth2018. 8. 9. 16:27

Android L 이후 BluetoothAdapter의 startLeScan 이 동작하지 않는다.



1,해결 책으로 먼저 아래와 같이 BluetoothLeScanner를 BluetoothAdapter로 부터 얻어온다.

mBluetoothAdapter =BluetoothAdapter.getDefaultAdapter();
mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();


2, ScanFilter와 ScanSettings를 입맛에 맞게 설정한다.

settings = new ScanSettings.Builder().setScanMode(
ScanSettings.SCAN_MODE_LOW_LATENCY)
.setReportDelay(0)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.build();

filters = new ArrayList<ScanFilter>();
ScanFilter filter = new ScanFilter.Builder().setDeviceName("device명");

3,아래 처럼 startScan을 호출한다.

//mBluetoothLeScanner.startScan(filters, settings, mScanCallback);
mBluetoothLeScanner.startScan(mScanCallback);


동작이 안되는 경우는 두가지 케이스가 있다. 


그럴 땐 onCreate에 ACCESS_COARSE_LOCATION 을 아래와 같이 추가해주자.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
}


이렇게 했는데도 ScanCallback 호출이 안된다?


그러면 Settings로 들어가 Location을 On 시키자. 그럼 된다.


어느 순간부터 구글이 멋대로 GMS에 Location기능에 GPS 및 bluetooth를 이용한 위치추적을 실시하고 있다.

웃기는건 Location을 Off로 만들어도 background로 Le scanning을 하고 있어 좀 구린 디바이스에는 성능 이슈를 야기하고 있다.



'bluetooth' 카테고리의 다른 글

Sample rate, Bit depth, Bit rate란  (0) 2018.09.27
bluetooth 코덱 비교에 관한 글  (0) 2018.09.27
BLE 기본 용어  (0) 2018.08.07
Remote voice recognition in latest Android  (0) 2018.08.07
SIMULTANEOUS USE OF A2DP and HFP/HSP in android  (0) 2018.08.07
Posted by easy16