Android Open Source - android-sdk Ble Devices Scanner From Project Back to project page android-sdk .
License The source code is released under:
MIT License
If you think the Android project android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code package io.relayr.ble;
/ * f r o m w w w . j a v a 2 s . c o m * /
import android.annotation.TargetApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
class BleDevicesScanner implements Runnable, BluetoothAdapter.LeScanCallback {
private static final String TAG = BleDevicesScanner.class.getSimpleName();
private static final long DEFAULT_SCAN_PERIOD = 7000;
private static final long PERIOD_SCAN_ONCE = -1;
private final BluetoothAdapter bluetoothAdapter;
private final Handler mainThreadHandler = new Handler(Looper.getMainLooper());
private final LeScansPoster leScansPoster;
private long scanPeriod = DEFAULT_SCAN_PERIOD;
private Thread scanThread;
private volatile boolean isScanning = false;
public BleDevicesScanner(BluetoothAdapter adapter, BluetoothAdapter.LeScanCallback callback) {
bluetoothAdapter = adapter;
leScansPoster = new LeScansPoster(callback);
}
public synchronized void setScanPeriod(long scanPeriod) {
this.scanPeriod = scanPeriod < 0 ? PERIOD_SCAN_ONCE : scanPeriod;
}
public boolean isScanning() {
return scanThread != null && scanThread.isAlive();
}
public synchronized void start() {
if (isScanning())
return ;
if (scanThread != null) {
scanThread.interrupt();
}
scanThread = new Thread(this );
scanThread.setName(TAG);
scanThread.start();
}
public synchronized void stop() {
isScanning = false;
if (scanThread != null) {
scanThread.interrupt();
scanThread = null;
}
bluetoothAdapter.stopLeScan(this );
}
@Override
public void run() {
try {
isScanning = true;
do {
synchronized (this ) {
bluetoothAdapter.startLeScan(this );
}
if (scanPeriod > 0)
Thread.sleep(scanPeriod);
synchronized (this ) {
// although it should never be null sometimes it happens to be
if (bluetoothAdapter != null) bluetoothAdapter.stopLeScan(this );
}
} while (isScanning && scanPeriod > 0);
} catch (InterruptedException ignore) {
} finally {
synchronized (this ) {
bluetoothAdapter.stopLeScan(this );
}
}
}
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte [] scanRecord) {
synchronized (leScansPoster) {
leScansPoster.set(device, rssi, scanRecord);
mainThreadHandler.post(leScansPoster);
}
}
private static class LeScansPoster implements Runnable {
private final BluetoothAdapter.LeScanCallback leScanCallback;
private BluetoothDevice device;
private int rssi;
private byte [] scanRecord;
private LeScansPoster(BluetoothAdapter.LeScanCallback leScanCallback) {
this.leScanCallback = leScanCallback;
}
public void set(BluetoothDevice device, int rssi, byte [] scanRecord) {
this.device = device;
this.rssi = rssi;
this.scanRecord = scanRecord;
}
@Override
public void run() {
leScanCallback.onLeScan(device, rssi, scanRecord);
}
}
}
Java Source Code List io.relayr.DebugModules.java io.relayr.LoginEventListener.java io.relayr.Modules.java io.relayr.RelayrApp.java io.relayr.RelayrModule.java io.relayr.RelayrSdk.java io.relayr.SocketClient.java io.relayr.activity.LoginActivity.java io.relayr.activity.UiModule.java io.relayr.api.ApiModule.java io.relayr.api.CloudApi.java io.relayr.api.DebugApiModule.java io.relayr.api.MockBackend.java io.relayr.api.MockCloudApi.java io.relayr.api.MockOauthApi.java io.relayr.api.MockRelayrApi.java io.relayr.api.MockStatusApi.java io.relayr.api.MockSubscriptionApi.java io.relayr.api.OauthApi.java io.relayr.api.RelayrApi.java io.relayr.api.StatusApi.java io.relayr.api.SubscriptionApi.java io.relayr.api.Utils.java io.relayr.api.package-info.java io.relayr.ble.BleDeviceManager.java io.relayr.ble.BleDeviceMode.java io.relayr.ble.BleDeviceType.java io.relayr.ble.BleDevice.java io.relayr.ble.BleDevicesScanner.java io.relayr.ble.BleModule.java io.relayr.ble.BleScannerFilter.java io.relayr.ble.BleSocketClient.java io.relayr.ble.BleUtils.java io.relayr.ble.BluetoothGattStatus.java io.relayr.ble.DebugBleModule.java io.relayr.ble.DeviceCompatibilityUtils.java io.relayr.ble.MockBleUtils.java io.relayr.ble.NullableRelayrBleSdk.java io.relayr.ble.RelayrBleSdkImpl.java io.relayr.ble.RelayrBleSdk.java io.relayr.ble.parser.AdvertisementPacketParser.java io.relayr.ble.parser.BleDataParser.java io.relayr.ble.service.BaseService.java io.relayr.ble.service.BluetoothGattReceiver.java io.relayr.ble.service.BondingReceiver.java io.relayr.ble.service.DirectConnectionService.java io.relayr.ble.service.MasterModuleService.java io.relayr.ble.service.OnBoardingService.java io.relayr.ble.service.Service.java io.relayr.ble.service.ShortUUID.java io.relayr.ble.service.Utils.java io.relayr.ble.service.error.CharacteristicNotFoundException.java io.relayr.ble.service.error.DisconnectionException.java io.relayr.ble.service.error.GattException.java io.relayr.ble.service.error.ReadCharacteristicException.java io.relayr.ble.service.error.WriteCharacteristicException.java io.relayr.ble.service.package-info.java io.relayr.ble.package-info.java io.relayr.log.LoggerStorage.java io.relayr.log.Logger.java io.relayr.model.AccelGyroscope.java io.relayr.model.App.java io.relayr.model.BookmarkDevice.java io.relayr.model.Bookmark.java io.relayr.model.Command.java io.relayr.model.CreateWunderBar.java io.relayr.model.DeviceModel.java io.relayr.model.Device.java io.relayr.model.LightColorProx.java io.relayr.model.LogEvent.java io.relayr.model.ModelDefinition.java io.relayr.model.Model.java io.relayr.model.OauthToken.java io.relayr.model.ReadingMeaning.java io.relayr.model.Reading.java io.relayr.model.Status.java io.relayr.model.TransmitterDevice.java io.relayr.model.Transmitter.java io.relayr.model.User.java io.relayr.model.WebSocketConfig.java io.relayr.model.WunderBar.java io.relayr.model.package-info.java io.relayr.storage.DataStorage.java io.relayr.storage.RelayrProperties.java io.relayr.util.DebugUtilModule.java io.relayr.util.MockReachabilityUtils.java io.relayr.util.ReachabilityUtils.java io.relayr.util.UtilModule.java io.relayr.websocket.DebugWebSocketModule.java io.relayr.websocket.MockWebSocketFactory.java io.relayr.websocket.MockWebSocket.java io.relayr.websocket.WebSocketCallback.java io.relayr.websocket.WebSocketClient.java io.relayr.websocket.WebSocketFactory.java io.relayr.websocket.WebSocketModule.java io.relayr.websocket.WebSocket.java io.relayr.websocket.package-info.java io.relayr.package-info.java