我试图使用RxAndroidBle LIB(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());
}
从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。但另外一些人(三星的Android J5 6)不返回空值。这就是让我寻找在不同的地方错误。但其操作简单,只需添加
if(BleScanResult.getBleDevice().getName()!=null)
现在它不会碎掉扫描。
在科特林你可以这样做:
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"
}