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 |