diff --git a/core/java/android/bluetooth/BluetoothGattCallbackWrapper.java b/core/java/android/bluetooth/BluetoothGattCallbackWrapper.java index 0eb9d21cbfa99..da992f55f2531 100644 --- a/core/java/android/bluetooth/BluetoothGattCallbackWrapper.java +++ b/core/java/android/bluetooth/BluetoothGattCallbackWrapper.java @@ -124,8 +124,7 @@ public class BluetoothGattCallbackWrapper extends IBluetoothGattCallback.Stub { } @Override - public void onFoundOrLost(boolean onFound, String address, int rssi, byte[] advData) - throws RemoteException { + public void onFoundOrLost(boolean onFound, ScanResult scanResult) throws RemoteException { } } diff --git a/core/java/android/bluetooth/IBluetoothGattCallback.aidl b/core/java/android/bluetooth/IBluetoothGattCallback.aidl index f14cce0b77172..00b6b1b7f5400 100644 --- a/core/java/android/bluetooth/IBluetoothGattCallback.aidl +++ b/core/java/android/bluetooth/IBluetoothGattCallback.aidl @@ -69,6 +69,5 @@ oneway interface IBluetoothGattCallback { in AdvertiseSettings advertiseSettings); void onConfigureMTU(in String address, in int mtu, in int status); void onConnectionCongested(in String address, in boolean congested); - void onFoundOrLost(in boolean onFound, in String address, in int rssi, - in byte[] advData); + void onFoundOrLost(in boolean onFound, in ScanResult scanResult); } diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java index 45e466fb1c76e..6667cc4c64c22 100644 --- a/core/java/android/bluetooth/le/BluetoothLeScanner.java +++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java @@ -322,22 +322,27 @@ public final class BluetoothLeScanner { } @Override - public void onFoundOrLost(boolean onFound, String address, int rssi, - byte[] advData) { + public void onFoundOrLost(final boolean onFound, final ScanResult scanResult) { if (DBG) { - Log.d(TAG, "onFoundOrLost() - Device=" + address); + Log.d(TAG, "onFoundOrLost() - onFound = " + onFound + + " " + scanResult.toString()); } - // ToDo: Fix issue with underlying reporting from chipset - BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice( - address); - long scanNanos = SystemClock.elapsedRealtimeNanos(); - ScanResult result = new ScanResult(device, ScanRecord.parseFromBytes(advData), rssi, - scanNanos); - if (onFound) { - mScanCallback.onScanResult(ScanSettings.CALLBACK_TYPE_FIRST_MATCH, result); - } else { - mScanCallback.onScanResult(ScanSettings.CALLBACK_TYPE_MATCH_LOST, result); + + // Check null in case the scan has been stopped + synchronized (this) { + if (mClientIf <= 0) return; } + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(new Runnable() { + @Override + public void run() { + if (onFound) { + mScanCallback.onScanResult(ScanSettings.CALLBACK_TYPE_FIRST_MATCH, scanResult); + } else { + mScanCallback.onScanResult(ScanSettings.CALLBACK_TYPE_MATCH_LOST, scanResult); + } + } + }); } }