Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. import android.bluetooth.le.BluetoothLeScanner;
  2. import android.bluetooth.le.ScanCallback;
  3. import android.bluetooth.le.ScanResult;
  4. import android.support.annotation.NonNull;
  5. import rx.Emitter;
  6. import rx.Observable;
  7.  
  8. import java.util.List;
  9.  
  10. public class RxBluetoothScanner {
  11. public static class ScanResultException extends RuntimeException {
  12. public ScanResultException(int errorCode) {
  13. super("Bluetooth scan failed. Error code: " + errorCode);
  14. }
  15. }
  16.  
  17. private RxBluetoothScanner() {
  18. }
  19.  
  20. @NonNull
  21. public static Observable<ScanResult> scan(@NonNull final BluetoothLeScanner scanner) {
  22. return Observable.fromEmitter(scanResultEmitter -> {
  23. final ScanCallback scanCallback = new ScanCallback() {
  24. @Override
  25. public void onScanResult(int callbackType, @NonNull ScanResult result) {
  26. scanResultEmitter.onNext(result);
  27. }
  28.  
  29. @Override
  30. public void onBatchScanResults(@NonNull List<ScanResult> results) {
  31. for (ScanResult r : results) {
  32. scanResultEmitter.onNext(r);
  33. }
  34. }
  35.  
  36. @Override
  37. public void onScanFailed(int errorCode) {
  38. scanResultEmitter.onError(new ScanResultException(errorCode));
  39. }
  40. };
  41.  
  42. scanResultEmitter.setCancellation(() -> scanner.stopScan(scanCallback));
  43. scanner.startScan(scanCallback);
  44. }, Emitter.BackpressureMode.BUFFER);
  45. }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement