Java 类android.bluetooth.le.BluetoothLeScanner 实例源码

项目:NobleAries    文件:Chores.java   
private boolean startDiscoveringBle(){

    if (D) Log.d(TAG, "+++ startDiscoveringBle() +++");

    if (mAdapter.isDiscovering()){
        Log.i(TAG, "startDiscoveringBle() : Already in classic discovering mode");
        return true;
    }

    if (isLollipopApi){
        Log.i(TAG, "startDiscoveringBle() : Choose startScan()");
        mLeScanner = mAdapter.getBluetoothLeScanner();

        if (null != mLeScanner){
            ((BluetoothLeScanner)mLeScanner).startScan((ScanCallback)mScanCallback);
            return true;
        }

        // TODO
        // return mAdapter.startScan(mScanCallback); ???
    } else {
        Log.i(TAG, "startDiscoveringBle() : Choose startLeScan()");
        return mAdapter.startLeScan(mLeScanCallback);
    }
    return true;
}
项目:TappyBLE    文件:LollipopBleScanner.java   
@Override
public void stopScan(@NonNull ScanCallback callback) {
    ScanCallbackHolder holder = callbackHolderMap.get(callback);
    if(holder == null) //possibly should throw an exception...
        return;

    BluetoothLeScanner scanner = getNativeScannerOrThrow();

    scanner.stopScan(holder.getNativeCallback());
    callbackHolderMap.remove(callback);
}
项目:u2f-ble-test    文件:U2FBLEDevice.java   
protected static void scanDevice(BluetoothAdapter bluetoothAdapter, U2FBLEDeviceNotification notification, Logger logger, Context context, String data, ScanType scanType) {
    BluetoothLeScanner bluetoothScanner = bluetoothAdapter.getBluetoothLeScanner();
    ScanFilter.Builder builder = new ScanFilter.Builder();
    switch(scanType) {
        case SCAN_BY_NAME:
            builder.setDeviceName(data);
            break;
    }
    Vector<ScanFilter> filter = new Vector<ScanFilter>();
    filter.add(builder.build());
    ScanSettings.Builder builderScanSettings = new ScanSettings.Builder();
    builderScanSettings.setScanMode(ScanSettings.SCAN_MODE_BALANCED);
    builderScanSettings.setReportDelay(0);
    LocalScanCallback scannerCallback = new LocalScanCallback(bluetoothAdapter, logger, notification, context);
    bluetoothScanner.startScan(filter, builderScanSettings.build(), scannerCallback);       
}
项目:miband-android    文件:MiBand.java   
/**
 * Starts scanning for devices
 *
 * @return An Observable which emits ScanResult
 */
public Observable<ScanResult> startScan() {
    return Observable.create(subscriber -> {
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter != null) {
            BluetoothLeScanner scanner = adapter.getBluetoothLeScanner();
            if (scanner != null) {
                scanner.startScan(getScanCallback(subscriber));
            } else {
                Log.e(TAG, "BluetoothLeScanner is null");
                subscriber.onError(new NullPointerException("BluetoothLeScanner is null"));
            }
        } else {
            Log.e(TAG, "BluetoothAdapter is null");
            subscriber.onError(new NullPointerException("BluetoothLeScanner is null"));
        }
    });
}
项目:miband-android    文件:MiBand.java   
/**
 * Stops scanning for devices
 *
 * @return An Observable which emits ScanResult
 */
public Observable<ScanResult> stopScan() {
    return Observable.create(subscriber -> {
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter != null) {
            BluetoothLeScanner scanner = adapter.getBluetoothLeScanner();
            if (scanner != null) {
                scanner.stopScan(getScanCallback(subscriber));
            } else {
                Log.e(TAG, "BluetoothLeScanner is null");
                subscriber.onError(new NullPointerException("BluetoothLeScanner is null"));
            }
        } else {
            Log.e(TAG, "BluetoothAdapter is null");
            subscriber.onError(new NullPointerException("BluetoothLeScanner is null"));
        }
    });
}
项目:NobleAries    文件:Chores.java   
private boolean cancelDiscoveringBle(){

    if (D) Log.d(TAG, "+++ cancelDiscoveringBle() +++");

    if (mAdapter.isDiscovering()){
        Log.i(TAG, "cancelDiscoveringBle() : In classic discovering mode");
        return false;
    }

    if (isLollipopApi){
        Log.i(TAG, "cancelDiscoveringBle() : Choose stopScan()");

        if (null != mLeScanner){
            ((BluetoothLeScanner)mLeScanner).stopScan((ScanCallback)mScanCallback);
            return true;
        }

        // TODO
        // return mAdapter.stopScan(mScanCallback); ???
    } else {
        Log.i(TAG, "cancelDiscoveringBle() : Choose stopLeScan()");
        mAdapter.stopLeScan(mLeScanCallback);
    }
    return true;
}
项目:Android-Scanner-Compat-Library    文件:BluetoothLeScannerImplLollipop.java   
@Override
public void stopScan(final ScanCallback callback) {
    final ScanCallbackWrapper wrapper = mWrappers.get(callback);
    if (wrapper == null)
        return;

    wrapper.close();
    mWrappers.remove(callback);
    android.bluetooth.le.ScanCallback _callback = mCallbacks.get(callback);
    mCallbacks.remove(callback);
    mWrappers2.remove(_callback);

    final BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner();
    if (scanner == null)
        return;

    scanner.stopScan(_callback);
}
项目:miband-sdk-android    文件:MiBand.java   
public static void stopScan(ScanCallback callback) {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    if (null == adapter) {
        Log.e(TAG, "BluetoothAdapter is null");
        return;
    }
    BluetoothLeScanner scanner = adapter.getBluetoothLeScanner();
    if (null == scanner) {
        Log.e(TAG, "BluetoothLeScanner is null");
        return;
    }
    scanner.stopScan(callback);
}
项目:android-beacon-library    文件:ScanHelper.java   
@RequiresApi(api = Build.VERSION_CODES.O)
void stopAndroidOBackgroundScan() {
    try {
        final BluetoothManager bluetoothManager =
                (BluetoothManager) mContext.getApplicationContext().getSystemService(Context.BLUETOOTH_SERVICE);
        BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
        if (bluetoothAdapter == null) {
            LogManager.w(TAG, "Failed to construct a BluetoothAdapter");
        } else if (!bluetoothAdapter.isEnabled()) {
            LogManager.w(TAG, "BluetoothAdapter is not enabled");
        } else {
           BluetoothLeScanner scanner =  bluetoothAdapter.getBluetoothLeScanner();
           if (scanner != null) {
               scanner.stopScan(getScanCallbackIntent());
           }
        }
    } catch (SecurityException e) {
        LogManager.e(TAG, "SecurityException stopping Android O background scanner");
    }
}
项目:android-beacon-library    文件:CycledLeScannerForLollipop.java   
private BluetoothLeScanner getScanner() {
    try {
        if (mScanner == null) {
            LogManager.d(TAG, "Making new Android L scanner");
            BluetoothAdapter bluetoothAdapter = getBluetoothAdapter();
            if (bluetoothAdapter != null) {
                mScanner = getBluetoothAdapter().getBluetoothLeScanner();
            }
            if (mScanner == null) {
                LogManager.w(TAG, "Failed to make new Android L scanner");
            }
        }
    }
    catch (SecurityException e) {
        LogManager.w(TAG, "SecurityException making new Android L scanner");
    }
    return mScanner;
}
项目:AndroidSensors    文件:BLEMeasurementsGatherer.java   
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void startListeningBluetoothMeasurements(List<ScanFilter> scanFilters,
                                                 ScanSettings scanSettings,
                                                 ScanCallback scanCallback){
    BluetoothLeScanner scanner = bluetoothManager.getAdapter().getBluetoothLeScanner();
    scanner.startScan(scanFilters, scanSettings, scanCallback);
}
项目:AndroidSensors    文件:BLEMeasurementsGatherer.java   
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void addUnsuscribeCallbackFor(FlowableEmitter<SensorRecord> subscriber,
                                      final ScanCallback scanCallback){
    final BluetoothLeScanner scanner = bluetoothManager.getAdapter().getBluetoothLeScanner();
    subscriber.setCancellable(new Cancellable() {
        @Override
        public void cancel() throws Exception {
            scanner.flushPendingScanResults(scanCallback);
            scanner.stopScan(scanCallback);
        }
    });
}
项目:ITagAntiLost    文件:NewDevicePresenter.java   
private void pause() {
  if (bluetoothAdapter != null) {
    BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
    if (scanner != null && scanCallback != null) {
      scanner.stopScan(scanCallback);
    }
  }
}
项目:RxAndroidBle    文件:RxBleAdapterWrapper.java   
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void stopLeScan(ScanCallback scanCallback) {
    final BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
    if (bluetoothLeScanner == null) {
        RxBleLog.d("Cannot perform BluetoothLeScanner.stopScan(ScanCallback) because scanner is unavailable (Probably adapter is off)");
        // if stopping the scan is not possible due to BluetoothLeScanner not accessible then it is probably stopped anyway
        return;
    }
    bluetoothLeScanner.stopScan(scanCallback);
}
项目:TappyBLE    文件:LollipopBleScanner.java   
@Override
@RequiresPermission(allOf = {Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH})
public void startScan(@NonNull ScanCallback callback) {
    ScannerUtils.throwOnAdaptorNotEnabled(bluetoothAdapter);
    final BluetoothLeScanner nativeScanner = getNativeScannerOrThrow();

    throwIfCallbackInUse(callback);

    ScanCallbackHolder holder = new ScanCallbackHolder(callback);
    callbackHolderMap.put(callback,holder);

    nativeScanner.startScan(holder.getNativeCallback());
}
项目:TappyBLE    文件:LollipopBleScanner.java   
@Override
public void startScan(List<ScanFilter> filters, @NonNull ScanSettings settings, @NonNull ScanCallback callback) {
    ScannerUtils.throwOnAdaptorNotEnabled(bluetoothAdapter);
    final BluetoothLeScanner nativeScanner = getNativeScannerOrThrow();

    throwIfCallbackInUse(callback);

    ScanCallbackHolder holder = new ScanCallbackHolder(callback,settings,filters);
    callbackHolderMap.put(callback,holder);
    nativeScanner.startScan(holder.getNativeFilters(), holder.getNativeScanSettings(), holder.getNativeCallback());
}
项目:TappyBLE    文件:LollipopBleScanner.java   
@Override
public void flushPendingScanResults(@NonNull ScanCallback callback) {
    ScannerUtils.throwOnAdaptorNotEnabled(bluetoothAdapter);
    BluetoothLeScanner nativeScanner = getNativeScannerOrThrow();

    ScanCallbackHolder holder = callbackHolderMap.get(callback);
    if(holder == null)
        throw new IllegalArgumentException("Callback not registered");

    nativeScanner.flushPendingScanResults(holder.getNativeCallback());
}
项目:u2f-ble-test    文件:MainActivity.java   
private void startScan() {
    BluetoothLeScanner bluetoothScanner = bluetoothAdapter.getBluetoothLeScanner();
    ScanFilter.Builder builder = new ScanFilter.Builder();      
    Vector<ScanFilter> filter = new Vector<ScanFilter>();
    filter.add(builder.build());
    ScanSettings.Builder builderScanSettings = new ScanSettings.Builder();      
    builderScanSettings.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY);
    builderScanSettings.setReportDelay(0);
    bluetoothScanner.startScan(filter, builderScanSettings.build(), leScanCallback);
}
项目:ibeacon-scanner-android    文件:DefaultBluetoothFactory.java   
/**
 * @return the {@link BluetoothLeScanner}
 */
@Override
@Nullable
public BluetoothLeScanner getBluetoothLeScanner()
{
    return this.canAttachBluetoothAdapter() ? this.bluetoothAdapter.getBluetoothLeScanner() : null;
}
项目:android-buruberi    文件:ShadowBluetoothAdapterExt.java   
@Implementation
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public BluetoothLeScanner getBluetoothLeScanner() {
    if (bluetoothLeScanner == null) {
        this.bluetoothLeScanner = ReflectionHelpers.newInstance(BluetoothLeScanner.class);
    }

    return bluetoothLeScanner;
}
项目:Android-Scanner-Compat-Library    文件:BluetoothLeScannerImplLollipop.java   
@Override
@RequiresPermission(allOf = {Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH})
/* package */ void startScanInternal(final List<ScanFilter> filters, final ScanSettings settings, final ScanCallback callback) {
    BluetoothLeUtils.checkAdapterStateOn(mBluetoothAdapter);
    offloadedFilteringSupported = mBluetoothAdapter.isOffloadedFilteringSupported();

    if (mWrappers.containsKey(callback)) {
        throw new IllegalArgumentException("scanner already started with given callback");
    }

    final BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner();
    if (scanner == null)
        throw new IllegalStateException("BT le scanner not available");

    final ScanCallbackWrapper wrapper = new ScanCallbackWrapper(filters, settings, callback);
    final ScanCallbackImpl _callback = new ScanCallbackImpl();
    final android.bluetooth.le.ScanSettings _settings = toImpl(mBluetoothAdapter, settings);
    List<android.bluetooth.le.ScanFilter> _filters = null;
    if (filters != null && mBluetoothAdapter.isOffloadedFilteringSupported() && settings.getUseHardwareFilteringIfSupported())
        _filters = toImpl(filters);

    mWrappers.put(callback, wrapper);
    mCallbacks.put(callback, _callback);
    mWrappers2.put(_callback, wrapper);

    scanner.startScan(_filters, _settings, _callback);
}
项目:365browser    文件:Wrappers.java   
public BluetoothLeScannerWrapper getBluetoothLeScanner() {
    BluetoothLeScanner scanner = mAdapter.getBluetoothLeScanner();
    if (scanner == null) {
        return null;
    }
    if (mScannerWrapper == null) {
        mScannerWrapper = new BluetoothLeScannerWrapper(scanner);
    }
    return mScannerWrapper;
}
项目:miband-sdk-android    文件:MiBand.java   
public static void startScan(ScanCallback callback) {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    if (null == adapter) {
        Log.e(TAG, "BluetoothAdapter is null");
        return;
    }
    BluetoothLeScanner scanner = adapter.getBluetoothLeScanner();
    if (null == scanner) {
        Log.e(TAG, "BluetoothLeScanner is null");
        return;
    }
    scanner.startScan(callback);
}
项目:SweetBlue    文件:L_Util.java   
public static void stopNativeScan(BluetoothAdapter adapter) {
    if (adapter == null)
    {
        Log.e("ScanManager", "Tried to stop the scan, but the Bluetooth Adapter instance was null!");
        return;
    }

    final BluetoothLeScanner scanner = adapter.getBluetoothLeScanner();
    if (scanner != null)
        scanner.stopScan(m_callback);
    else
        Log.w("ScanManager", "Tried to stop the scan, but the BluetoothLeScanner instance was null. This implies the scanning has stopped already.");
}
项目:android-beacon-library    文件:StartupBroadcastReceiver.java   
@Override
public void onReceive(Context context, Intent intent) {
    LogManager.d(TAG, "onReceive called in startup broadcast receiver");
    if (android.os.Build.VERSION.SDK_INT < 18) {
        LogManager.w(TAG, "Not starting up beacon service because we do not have API version 18 (Android 4.3).  We have: %s", android.os.Build.VERSION.SDK_INT);
        return;
    }
    BeaconManager beaconManager = BeaconManager.getInstanceForApplication(context.getApplicationContext());
    if (beaconManager.isAnyConsumerBound() || beaconManager.getScheduledScanJobsEnabled()) {
        int bleCallbackType = intent.getIntExtra(BluetoothLeScanner.EXTRA_CALLBACK_TYPE, -1); // e.g. ScanSettings.CALLBACK_TYPE_FIRST_MATCH
        if (bleCallbackType != -1) {
            LogManager.d(TAG, "Passive background scan callback type: "+bleCallbackType);
            LogManager.d(TAG, "got Android O background scan via intent");
            int errorCode = intent.getIntExtra(BluetoothLeScanner.EXTRA_ERROR_CODE, -1); // e.g.  ScanCallback.SCAN_FAILED_INTERNAL_ERROR
            if (errorCode != -1) {
                LogManager.w(TAG, "Passive background scan failed.  Code; "+errorCode);
            }
            ArrayList<ScanResult> scanResults = intent.getParcelableArrayListExtra(BluetoothLeScanner.EXTRA_LIST_SCAN_RESULT);
            ScanJobScheduler.getInstance().scheduleAfterBackgroundWakeup(context, scanResults);
        }
        else if (intent.getBooleanExtra("wakeup", false)) {
            LogManager.d(TAG, "got wake up intent");
        }
        else {
            LogManager.d(TAG, "Already started.  Ignoring intent: %s of type: %s", intent,
                    intent.getStringExtra("wakeup"));
        }
    }
    else {
        LogManager.d(TAG, "No consumers are bound.  Ignoring broadcast receiver.");
    }
 }
项目:libble-android    文件:BleService.java   
/**
 * Stops an ongoing BLE Scan for the given callback.
 *
 * @param callback An instance of the BleScanCallback, used to start the scan.
 */
public void stopScan(@NonNull final BleScanCallback callback) {
    if (mBluetoothAdapter == null) {
        Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
        return;
    }

    if (mStopScanningRunnable == null) return;

    mScanHandler.removeCallbacks(mStopScanningRunnable);
    final BluetoothLeScanner bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
    bluetoothLeScanner.stopScan(callback);
    mStopScanningRunnable = null;
    callback.onScanStopped();
}
项目:TappyBLE    文件:LollipopBleScanner.java   
protected BluetoothLeScanner getNativeScannerOrThrow() {
    BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
    if(scanner == null)
        throw new IllegalStateException("Could not get scanner");
    return scanner;
}
项目:BLECommunication    文件:BLEUtil.java   
public void scanPeripheralWithServicesUUID_API21(final String uuid) {
        if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
            requestOpenBT();
            return;
        }
        BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner();
        ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
        List<ScanFilter> list = new ArrayList<ScanFilter>(1);

        ScanCallback callback = new ScanCallback() {
            @Override
            public void onScanResult(int callbackType,  android.bluetooth.le.ScanResult result) {
                BluetoothDevice device = result.getDevice();

                ScanRecord sr = result.getScanRecord();

                int rssi = result.getRssi();
//              if (rssi > -15) {
//                  runCallbackWithErrorCode(BLEUtilErrorCode.E_RSSI_ERROR);
//                  return;
//              }
//              if (rssi < -35) {
//                  runCallbackWithErrorCode(BLEUtilErrorCode.E_RSSI_TOO_LOW);
//                  return;
//              }
                if (matchRules(rssi, sr.getBytes(), uuid)) {
                    connectToDevice(device);
                }
            }

            @Override
            public void onScanFailed(int errorCode) {

            }
        };

        if (uuid != null) {
            ScanFilter filter = new ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString(uuid)).build();
            list.add(filter);
            scanner.startScan(list, settings, callback);
        } else {
//          scanner.startScan(null, settings, callback);
            scanner.startScan(callback);
        }
    }
项目:BLECommunication    文件:BLEUtil.java   
public void scanPeripheralWithServicesUUID_API21(final String uuid) {
        if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
            requestOpenBT();
            return;
        }
        BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner();
        ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
        List<ScanFilter> list = new ArrayList<ScanFilter>(1);

        ScanCallback callback = new ScanCallback() {
            @Override
            public void onScanResult(int callbackType,  android.bluetooth.le.ScanResult result) {
                BluetoothDevice device = result.getDevice();

                ScanRecord sr = result.getScanRecord();

                int rssi = result.getRssi();
//              if (rssi > -15) {
//                  runCallbackWithErrorCode(BLEUtilErrorCode.E_RSSI_ERROR);
//                  return;
//              }
//              if (rssi < -35) {
//                  runCallbackWithErrorCode(BLEUtilErrorCode.E_RSSI_TOO_LOW);
//                  return;
//              }
                if (matchRules(rssi, sr.getBytes(), uuid)) {
                    connectToDevice(device);
                }
            }

            @Override
            public void onScanFailed(int errorCode) {

            }
        };

        if (uuid != null) {
            ScanFilter filter = new ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString(uuid)).build();
            list.add(filter);
            scanner.startScan(list, settings, callback);
        } else {
//          scanner.startScan(null, settings, callback);
            scanner.startScan(callback);
        }
    }
项目:android-buruberi    文件:BuruberiShadows.java   
public static ShadowBluetoothLeScanner shadowOf(@NonNull BluetoothLeScanner bluetoothAdapter) {
    return (ShadowBluetoothLeScanner) ShadowExtractor.extract(bluetoothAdapter);
}
项目:365browser    文件:Wrappers.java   
public BluetoothLeScannerWrapper(BluetoothLeScanner scanner) {
    mScanner = scanner;
    mCallbacks = new HashMap<ScanCallbackWrapper, ForwardScanCallbackToWrapper>();
}
项目:android-ble    文件:BleScannerL.java   
private BluetoothLeScanner getScanner() {
    if (scanner == null && bluetoothAdapter != null) {
        scanner = bluetoothAdapter.getBluetoothLeScanner();
    }
    return scanner;
}
项目:libble-android    文件:BleService.java   
/**
 * Starts a BLE Scan. Discovered devices are reported via the delivered callback.
 *
 * @param callback                    An instance of the BleScanCallback, used to receive scan results.
 * @param durationMs                  The duration in milliseconds, how long the scan should last. This parameter
 *                                    must be greater or equal to 1000 ms.
 * @param deviceNameFilter            A array of device names to filter for. Only BLE devices with these
 *                                    names are reported to the callback.
 * @param advertisedServiceUuidFilter An Array of advertised service UUIDs to also deliver results for.
 * @return true if a scan was triggered and false, if it was not possible to trigger a scan or
 * if there is already an ongoing scan running.
 */
public boolean startScan(@NonNull final BleScanCallback callback, final long durationMs,
                         final String[] deviceNameFilter, final String[] advertisedServiceUuidFilter) {
    if (mBluetoothAdapter == null) {
        Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
        return false;
    }

    if (durationMs < MIN_SCAN_DURATION_MS) {
        Log.w(TAG, "The scan duration must be longer than 1 second");
        return false;
    }

    if (mStopScanningRunnable != null) {
        Log.w(TAG, "Already a scan running");
        return false;
    }

    final BluetoothLeScanner bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
    if (bluetoothLeScanner == null) {
        Log.w(TAG, "Failed to scan. Bluetooth appears to be unavailable");
        return false;
    }
    final ScanSettings settings = new ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .build();

    final List<ScanFilter> filters = getScanFilters(deviceNameFilter, advertisedServiceUuidFilter);

    // Stops scanning after a pre-defined scan period.
    mStopScanningRunnable = new Runnable() {
        @Override
        public void run() {
            stopScan(callback);
        }
    };
    mScanHandler.postDelayed(mStopScanningRunnable, durationMs);

    bluetoothLeScanner.startScan(filters, settings, callback);
    return true;
}
项目:ibeacon-scanner-android    文件:BluetoothFactory.java   
/**
 * @return a {@link BluetoothLeScanner}
 */
@Nullable
BluetoothLeScanner getBluetoothLeScanner();