From a5a15be106db7c2fbd79455e578533005d84d6ca Mon Sep 17 00:00:00 2001 From: Philip Peitsch Date: Sat, 13 Jul 2024 20:38:10 +1000 Subject: [PATCH] Mark broadcast receivers as exported for Android v34 (#1020) --- src/android/BLECentralPlugin.java | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/android/BLECentralPlugin.java b/src/android/BLECentralPlugin.java index bd039cb7..a3692085 100644 --- a/src/android/BLECentralPlugin.java +++ b/src/android/BLECentralPlugin.java @@ -665,7 +665,7 @@ public void onReceive(Context context, Intent intent) { try { IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); - webView.getContext().registerReceiver(this.stateReceiver, intentFilter); + registerSystemReceiverCompat(this.stateReceiver, intentFilter); } catch (Exception e) { LOG.e(TAG, "Error registering state receiver: " + e.getMessage(), e); } @@ -712,7 +712,7 @@ public void onReceive(Context context, Intent intent) { try { IntentFilter intentFilter = new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION); intentFilter.addAction(Intent.ACTION_PROVIDER_CHANGED); - webView.getContext().registerReceiver(this.locationStateReceiver, intentFilter); + registerSystemReceiverCompat(this.locationStateReceiver, intentFilter); } catch (Exception e) { LOG.e(TAG, "Error registering location state receiver: " + e.getMessage(), e); } @@ -853,7 +853,7 @@ public void onReceive(Context context, Intent intent) { IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST); intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - webView.getContext().registerReceiver(broadCastReceiver, intentFilter); + registerSystemReceiverCompat(broadCastReceiver, intentFilter); callbackContext.success("OK"); } catch (Exception e) { @@ -1164,7 +1164,7 @@ public void onScanResult(int callbackType, ScanResult result) { if (!alreadyReported) { Boolean isConnectable = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - isConnectable = result.isConnectable(); + isConnectable = result.isConnectable(); } Peripheral peripheral = new Peripheral(device, result.getRssi(), result.getScanRecord().getBytes(), isConnectable); @@ -1511,7 +1511,7 @@ public void onReceive(Context context, Intent intent) { } } }; - webView.getContext().registerReceiver(bondStateReceiver, new IntentFilter(ACTION_BOND_STATE_CHANGED)); + registerSystemReceiverCompat(bondStateReceiver, new IntentFilter(ACTION_BOND_STATE_CHANGED)); } } @@ -1521,4 +1521,14 @@ private void removeBondStateListener() { bondStateReceiver = null; } } + + @SuppressLint({"UnspecifiedRegisterReceiverFlag", "WrongConstant"}) + private void registerSystemReceiverCompat(BroadcastReceiver receiver, IntentFilter filter) { + Context context = webView.getContext(); + if (Build.VERSION.SDK_INT >= 34 /*14*/) { + context.registerReceiver(receiver, filter, 2); // // Context.RECEIVER_EXPORTED + } else { + context.registerReceiver(receiver, filter); + } + } }