구글링을 해보니 Oreo Version에서 Wi-FI&Bluetooth Search 부분이 강화되어 코드를 변경해야 하는데
코드를 변경 하였음에도 Scan이 되지 않는 현상이 발생합니다.
Permission
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
Scan Method
public void startScan(){
List<ScanFilter> filters = new ArrayList<>();
ScanFilter.Builder filter = new ScanFilter.Builder();
ScanFilter scanFilter=filter.build();
filters.add(scanFilter);
ScanSettings settings = new ScanSettings.Builder()
.setReportDelay(0)
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
bleScanner.startScan(filters, settings, OreoBLEScanInt);
}else {
bleScanner.startScan(filters, settings, scanCallback);
}
}
Oreo Version 이상 Scan Callback 을 받기위한 PendingInent 선언 부
BLE_Recevice = new Intent(mContext,BleBroadcast.class);
BLE_Recevice.setAction(BluetoothDevice.ACTION_FOUND);
Log.e(TAG,"GET ACTION : "+BLE_Recevice.getAction());
OreoBLEScanInt = PendingIntent.getBroadcast(mContext,BLE_SCAN_RECEVICE_CODE,BLE_Recevice,0);
Scan에대한 정보를 Callback 받는 BroadCast--> Inner Class로 정의 되어있습니다. (이유 따로 Callback을 만들어 사용하기 때문에 Callback 변수를 사용하기 위함.
private class BleBroadcast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG,"CALL PendingIntent");
}
}
이렇게 구현시에 BluetoothDevice.ActionFound에 관한 퍼미션 애러가 나네요. 퍼미션에는 블루투스에 관한 권한이 빠지지 않았는데요
그래서 구글링 결과 BluetoothDevice.ActionFound -->를 MyappPackage.ActionFound 로 변경하여 setAction을 해본결과 아무런 반응이없었습니다.
혹제가 잘못하고 있는것이나 Oreo 버전 Ble Scan에 관한 샘플 소스르 제공하는 곳이 있다면 알려주실수 있으신가요 부탁드립니다..ㅠ