Search in sources :

Example 6 with BluetoothLeScanner

use of android.bluetooth.le.BluetoothLeScanner in project android_frameworks_base by AOSPA.

the class KeyboardUI method stopScanning.

private void stopScanning() {
    if (mScanCallback != null) {
        BluetoothLeScanner scanner = mLocalBluetoothAdapter.getBluetoothLeScanner();
        if (scanner != null) {
            scanner.stopScan(mScanCallback);
        }
        mScanCallback = null;
    }
}
Also used : BluetoothLeScanner(android.bluetooth.le.BluetoothLeScanner)

Example 7 with BluetoothLeScanner

use of android.bluetooth.le.BluetoothLeScanner in project android_frameworks_base by AOSPA.

the class KeyboardUI method startScanning.

private void startScanning() {
    BluetoothLeScanner scanner = mLocalBluetoothAdapter.getBluetoothLeScanner();
    ScanFilter filter = (new ScanFilter.Builder()).setDeviceName(mKeyboardName).build();
    ScanSettings settings = (new ScanSettings.Builder()).setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT).setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(0).build();
    mScanCallback = new KeyboardScanCallback();
    scanner.startScan(Arrays.asList(filter), settings, mScanCallback);
    Message abortMsg = mHandler.obtainMessage(MSG_BLE_ABORT_SCAN, ++mScanAttempt, 0);
    mHandler.sendMessageDelayed(abortMsg, BLUETOOTH_SCAN_TIMEOUT_MILLIS);
}
Also used : BluetoothLeScanner(android.bluetooth.le.BluetoothLeScanner) ScanSettings(android.bluetooth.le.ScanSettings) Message(android.os.Message) ScanFilter(android.bluetooth.le.ScanFilter)

Example 8 with BluetoothLeScanner

use of android.bluetooth.le.BluetoothLeScanner in project android_frameworks_base by ResurrectionRemix.

the class KeyboardUI method stopScanning.

private void stopScanning() {
    if (mScanCallback != null) {
        BluetoothLeScanner scanner = mLocalBluetoothAdapter.getBluetoothLeScanner();
        if (scanner != null) {
            scanner.stopScan(mScanCallback);
        }
        mScanCallback = null;
    }
}
Also used : BluetoothLeScanner(android.bluetooth.le.BluetoothLeScanner)

Example 9 with BluetoothLeScanner

use of android.bluetooth.le.BluetoothLeScanner in project android_frameworks_base by ResurrectionRemix.

the class BluetoothAdapter method startLeScan.

/**
     * Starts a scan for Bluetooth LE devices, looking for devices that
     * advertise given services.
     *
     * <p>Devices which advertise all specified services are reported using the
     * {@link LeScanCallback#onLeScan} callback.
     *
     * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission.
     *
     * @param serviceUuids Array of services to look for
     * @param callback the callback LE scan results are delivered
     * @return true, if the scan was started successfully
     * @deprecated use {@link BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)}
     *             instead.
     */
@Deprecated
@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
public boolean startLeScan(final UUID[] serviceUuids, final LeScanCallback callback) {
    if (DBG)
        Log.d(TAG, "startLeScan(): " + Arrays.toString(serviceUuids));
    if (callback == null) {
        if (DBG)
            Log.e(TAG, "startLeScan: null callback");
        return false;
    }
    BluetoothLeScanner scanner = getBluetoothLeScanner();
    if (scanner == null) {
        if (DBG)
            Log.e(TAG, "startLeScan: cannot get BluetoothLeScanner");
        return false;
    }
    synchronized (mLeScanClients) {
        if (mLeScanClients.containsKey(callback)) {
            if (DBG)
                Log.e(TAG, "LE Scan has already started");
            return false;
        }
        try {
            IBluetoothGatt iGatt = mManagerService.getBluetoothGatt();
            if (iGatt == null) {
                // BLE is not supported
                return false;
            }
            ScanCallback scanCallback = new ScanCallback() {

                @Override
                public void onScanResult(int callbackType, ScanResult result) {
                    if (callbackType != ScanSettings.CALLBACK_TYPE_ALL_MATCHES) {
                        // Should not happen.
                        Log.e(TAG, "LE Scan has already started");
                        return;
                    }
                    ScanRecord scanRecord = result.getScanRecord();
                    if (scanRecord == null) {
                        return;
                    }
                    if (serviceUuids != null) {
                        List<ParcelUuid> uuids = new ArrayList<ParcelUuid>();
                        for (UUID uuid : serviceUuids) {
                            uuids.add(new ParcelUuid(uuid));
                        }
                        List<ParcelUuid> scanServiceUuids = scanRecord.getServiceUuids();
                        if (scanServiceUuids == null || !scanServiceUuids.containsAll(uuids)) {
                            if (DBG)
                                Log.d(TAG, "uuids does not match");
                            return;
                        }
                    }
                    callback.onLeScan(result.getDevice(), result.getRssi(), scanRecord.getBytes());
                }
            };
            ScanSettings settings = new ScanSettings.Builder().setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
            List<ScanFilter> filters = new ArrayList<ScanFilter>();
            if (serviceUuids != null && serviceUuids.length > 0) {
                // Note scan filter does not support matching an UUID array so we put one
                // UUID to hardware and match the whole array in callback.
                ScanFilter filter = new ScanFilter.Builder().setServiceUuid(new ParcelUuid(serviceUuids[0])).build();
                filters.add(filter);
            }
            scanner.startScan(filters, settings, scanCallback);
            mLeScanClients.put(callback, scanCallback);
            return true;
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        }
    }
    return false;
}
Also used : ParcelUuid(android.os.ParcelUuid) BluetoothLeScanner(android.bluetooth.le.BluetoothLeScanner) ScanResult(android.bluetooth.le.ScanResult) ScanSettings(android.bluetooth.le.ScanSettings) ScanFilter(android.bluetooth.le.ScanFilter) ArrayList(java.util.ArrayList) ScanCallback(android.bluetooth.le.ScanCallback) UUID(java.util.UUID) RemoteException(android.os.RemoteException) ScanRecord(android.bluetooth.le.ScanRecord) RequiresPermission(android.annotation.RequiresPermission)

Example 10 with BluetoothLeScanner

use of android.bluetooth.le.BluetoothLeScanner in project android-beacon-library by AltBeacon.

the class CycledLeScannerForLollipop method postStopLeScan.

private void postStopLeScan() {
    if (!isBluetoothOn()) {
        LogManager.d(TAG, "Not stopping scan because bluetooth is off");
        return;
    }
    final BluetoothLeScanner scanner = getScanner();
    if (scanner == null) {
        return;
    }
    final ScanCallback scanCallback = getNewLeScanCallback();
    mScanHandler.removeCallbacksAndMessages(null);
    mScanHandler.post(new Runnable() {

        @Override
        public void run() {
            try {
                scanner.stopScan(scanCallback);
            } catch (IllegalStateException e) {
                LogManager.w(TAG, "Cannot stop scan. Bluetooth may be turned off.");
            } catch (NullPointerException npe) {
                // Necessary because of https://code.google.com/p/android/issues/detail?id=160503
                LogManager.e(TAG, "Cannot stop scan. Unexpected NPE.", npe);
            } catch (SecurityException e) {
                // Thrown by Samsung Knox devices if bluetooth access denied for an app
                LogManager.e(TAG, "Cannot stop scan.  Security Exception");
            }
        }
    });
}
Also used : BluetoothLeScanner(android.bluetooth.le.BluetoothLeScanner) ScanCallback(android.bluetooth.le.ScanCallback)

Aggregations

BluetoothLeScanner (android.bluetooth.le.BluetoothLeScanner)22 ScanCallback (android.bluetooth.le.ScanCallback)12 RequiresPermission (android.annotation.RequiresPermission)10 ScanFilter (android.bluetooth.le.ScanFilter)10 ScanSettings (android.bluetooth.le.ScanSettings)10 ScanRecord (android.bluetooth.le.ScanRecord)5 ScanResult (android.bluetooth.le.ScanResult)5 Message (android.os.Message)5 ParcelUuid (android.os.ParcelUuid)5 RemoteException (android.os.RemoteException)5 ArrayList (java.util.ArrayList)5 UUID (java.util.UUID)5