From 9502a0dcfba4d490beac6ebf7432568419b0d7df Mon Sep 17 00:00:00 2001 From: Daniel Dakhno Date: Sat, 6 Apr 2024 10:46:55 +0000 Subject: [PATCH] Device scan: Fix permission check on Android 11 and below (#3659) Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3659 Co-authored-by: Daniel Dakhno Co-committed-by: Daniel Dakhno --- .../gadgetbridge/service/btle/BLEScanService.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java index e47551af2..5ef251405 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BLEScanService.java @@ -326,10 +326,20 @@ public class BLEScanService extends Service { unregisterReceiver(bluetoothStateChangedReceiver); } + private boolean hasBluetoothPermission(){ + if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.R){ + // workaround. Cannot give bluetooth permission on Android O + LOG.warn("Running on android 11, skipping bluetooth permission check"); + return ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED; + } + return ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED; + } + private void restartScan(boolean applyFilters) { - if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + if (!hasBluetoothPermission()) { // this should never happen LOG.error("No BLUETOOTH_SCAN permission"); + updateNotification("Missing Bluetooth scan permissions"); return; }