我正在编写一个扫描ble设备的应用程序,然后在列表视图中显示结果,以便用户可以单击要连接的设备。我有两个问题。一种是当我停止扫描并连接到设备时,连接不是很好。(设备上的LED保持闪烁,表示连接断开并重新连接。)我遇到的第二个问题是我在listview中获得了同一设备的多个结果。在OnLeScan()方法中,我将我找到的设备放入一个arraylist中,以便在扫描完成后显示。我该如何解决我的问题。我知道我正在使用旧的APi 21+
private BluetoothAdapter.LeScanCallback mLeScanCallback =
new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi,
byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mdevices.put(dcount, device);
names.add(mdevices.get(dcount).getName().toString() + " " + "MAC:" + mdevices.get(dcount).getAddress() + " " + rssi);
dcount++;
}
});
}
};
/////////////////////////////
public void scanDevice(boolean enable)
{
if(enable)
{
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT < 21) {
btAdapter.stopLeScan(mLeScanCallback);
}else
{
/// if I comment this out the connection is good
btAdapter.stopLeScan(mLeScanCallback);
}
}
}, 1100);
if (Build.VERSION.SDK_INT < 21) {
btAdapter.startLeScan(mLeScanCallback);
} else {
btAdapter.startLeScan(mLeScanCallback);
}
}
else
{
btAdapter.stopLeScan(mLeScanCallback);
}
}
答案 0 :(得分:1)
对于您的第一个问题,很难说是什么导致了断开连接。也许您正在测试设置的环境有足够的干扰导致定期断开连接。这可能是一种可能性。
要避免在public class MyServiceBinder : Binder
{
private readonly MyService _service;
public DemoServiceBinder(MyService service)
{
_service = service;
}
public MyService GetMyService()
{
return _service;
}
}
中显示同一设备的多个结果,请使用跟踪已扫描设备的ListView
。在HashSet
回调中,检查具有给定硬件地址的设备是否存在。如果没有,请将其添加到onLeScan
。像这样:
ArrayList
另外,请确保在刷新扫描时清除private HashSet<String> mLeDevicesScanned = new HashSet<String>();
@Override
public synchronized void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
if (mLeDevicesScanned.add(device.getAddress())) {
// Add this device to your ArrayList
}
}
。