diff options
author | Zhaoming Yin <zhaomingyin@google.com> | 2023-06-08 13:44:01 -0700 |
---|---|---|
committer | Zhaoming Yin <zhaomingyin@google.com> | 2023-07-10 15:54:42 -0700 |
commit | 3e878ee8167f00a5ab69ab82c682e1592fc9c063 (patch) | |
tree | e5679d6a89e50707d1d70bd9ea1202b61ed44de9 | |
parent | faff8996e774a2153a8d84365db2553f3ef0163d (diff) | |
download | mobly-bundled-snippets-3e878ee8167f00a5ab69ab82c682e1592fc9c063.tar.gz |
Solve permission issues when performing btDiscoverAndGetResults
-rw-r--r-- | src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java index 4c28cae..6f1c3f7 100644 --- a/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java +++ b/src/main/java/com/google/android/mobly/snippet/bundled/bluetooth/BluetoothAdapterSnippet.java @@ -35,7 +35,10 @@ import com.google.android.mobly.snippet.bundled.utils.Utils; import com.google.android.mobly.snippet.rpc.Rpc; import com.google.android.mobly.snippet.util.Log; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.HashMap; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; @@ -67,9 +70,12 @@ public class BluetoothAdapterSnippet implements Snippet { private static final ConcurrentHashMap<String, BluetoothDevice> mDiscoveryResults = new ConcurrentHashMap<>(); private volatile boolean mIsDiscoveryFinished = false; + private final Map<String, BroadcastReceiver> mReceivers; public BluetoothAdapterSnippet() throws Throwable { mContext = InstrumentationRegistry.getInstrumentation().getContext(); + // Use a synchronized map to avoid racing problems + mReceivers = Collections.synchronizedMap(new HashMap<String, BroadcastReceiver>()); Utils.adaptShellPermissionIfRequired(mContext); } @@ -192,11 +198,18 @@ public class BluetoothAdapterSnippet implements Snippet { } @Rpc(description = "Automatically confirm the incoming BT pairing request.") - public void btAutoConfirmIncomingPair() throws Throwable { + public void btStartAutoAcceptIncomingPairRequest() throws Throwable { + BroadcastReceiver receiver = new PairingBroadcastReceiver(mContext); mContext.registerReceiver( - new PairingBroadcastReceiver(mContext), PairingBroadcastReceiver.filter); + receiver, PairingBroadcastReceiver.filter); + mReceivers.put("AutoAcceptIncomingPairReceiver", receiver); } + @Rpc(description = "Stop the incoming BT pairing request.") + public void btStopAutoAcceptIncomingPairRequest() throws Throwable { + BroadcastReceiver receiver = mReceivers.remove("AutoAcceptIncomingPairReceiver"); + mContext.unregisterReceiver(receiver); + } @Rpc(description = "Returns the hardware address of the local Bluetooth adapter.") public String btGetAddress() { @@ -364,7 +377,12 @@ public class BluetoothAdapterSnippet implements Snippet { } @Override - public void shutdown() {} + public void shutdown() { + for (Map.Entry<String,BroadcastReceiver> entry : mReceivers.entrySet()) { + mContext.unregisterReceiver(entry.getValue()); + } + mReceivers.clear(); + } private class BluetoothScanReceiver extends BroadcastReceiver { |