2

我正在尝试使用 RxAndroidBle 库(https://github.com/Polidea/RxAndroidBle)。我希望应用程序启动并扫描 BLE 设备。我想在 LogCat 中打印找到的设备。我怎样才能做到这一点?

RxBleClient rxBleClient;
RxBleScanResult rxBleScanResult;
private Subscription scanSubscription;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   rxBleClient = RxBleClient.create(this);
   Subscription scanSubscription = rxBleClient.scanBleDevices().subscribe(
      rxBleScanResult.getBleDevice().getMacAddress());
}
4

2 回答 2

1

来自http://polidea.github.io/RxAndroidBle/

Subscription scanSubscription = rxBleClient.scanBleDevices().subscribe(
        rxBleScanResult -> {
            // Process scan result here.
            Log.e("MainActivity","FOUND :"+ rxBleScanResult.getBleDevice().getName());
        },
        throwable -> {
            // Handle an error here.
        }
    );

// When done, just unsubscribe.
scanSubscription.unsubscribe();

编辑:我注意到,这打破了扫描。甚至像比较是否BleScanResult.getBleDevice().getName().equals("BleName") 中断扫描之类的东西。它只返回 3 或 5 个设备,然后没有其他任何东西出现。

编辑 2:我将保留以前的编辑。可能有人会遇到同样的问题。某些手机​​ (LG G4 Android 6) 对某些蓝牙设备返回 null。但其他一些(Samsung J5 Android 6)不返回空值。这就是让我在不同的地方寻找错误的原因。但它很简单,只需添加

if(BleScanResult.getBleDevice().getName()!=null) 

现在它不再破坏扫描了。

于 2017-01-25T10:59:48.267 回答
0

在科特林你可以这样做:

Disposable scanSubscription = rxBleClient.scanBleDevices(
        new ScanSettings.Builder()
            // .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) // change if needed
            // .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // change if needed
            .build()
        // add filters if needed
)
    .subscribe(
        scanResult -> {
            // Process scan result here.
            Log.v(TAG,"Ble device address: " it.bleDevice.macAddress
        },
        throwable -> {
            // Handle an error here.
        }
    );

// When done, just dispose.
scanSubscription.dispose();

companion object {
   const val TAG = "your_tag_here"
}
于 2018-12-20T11:46:25.060 回答