diff --git a/Ble.jar b/Ble.jar index a99716b..9acc8b7 100644 Binary files a/Ble.jar and b/Ble.jar differ diff --git a/BlessedConnect.java b/BlessedConnect.java index b7da1ce..b1a49bf 100644 --- a/BlessedConnect.java +++ b/BlessedConnect.java @@ -35,6 +35,7 @@ public class BlessedConnect extends Fragment { final int PERMISSION_REQUEST = 1; final int REQUEST_ENABLE_BT = 2; + final int PERMISSION_REQUEST_BLE = 3; public BlessedConnect() { Log.d("gio", "BlessedConnect()"); @@ -63,7 +64,15 @@ public class BlessedConnect extends Fragment { super.onAttach(ctx); Log.d("gio", "BlessedConnect: onAttach()"); ctx.registerReceiver(receiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); - if (ctx.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + if (android.os.Build.VERSION.SDK_INT >= 31) { + // BLE on Android 12+ needs the BLUETOOTH_SCAN/CONNECT runtime + // permissions. BLUETOOTH_SCAN is declared with + // usesPermissionFlags="neverForLocation", so no location + // permission is required for scanning. + requestPermissions(new String[]{ + "android.permission.BLUETOOTH_SCAN", + "android.permission.BLUETOOTH_CONNECT"}, PERMISSION_REQUEST_BLE); + } else if (ctx.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST); } central = new BluetoothCentral(ctx, centralCallback, null); @@ -268,7 +277,7 @@ public class BlessedConnect extends Fragment { @Override public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) { Log.d("gio", "BlessedConnect: onRequestPermissionsResult"); - if (requestCode == PERMISSION_REQUEST) { + if (requestCode == PERMISSION_REQUEST || requestCode == PERMISSION_REQUEST_BLE) { boolean granted = true; for (int x : grantResults) { if (x == PackageManager.PERMISSION_DENIED) {