gpt4 book ai didi

Android BLE 连接断开

转载 作者:行者123 更新时间:2023-11-30 01:58:00 24 4
gpt4 key购买 nike

我正在编写一个扫描 ble 设备然后在 ListView 中显示结果的应用程序,以便用户可以单击设备进行连接。我有两个问题。一个是当我停止扫描并连接到设备时,连接不是很好。(设备上的 LED 一直闪烁,表示连接正在断开并重新连接。)我遇到的第二个问题是,在某些手机上我在 ListView 中获取同一设备的多个结果。在 OnLeScan() 方法中,我将找到的设备放入数组列表中,以便在扫描完成后显示。我该如何解决我的问题。我知道我使用的是 21 岁以上的旧 APi

     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);

}

最佳答案

对于您的第一个问题,很难说出是什么导致断开连接。也许您正在测试您的设置的环境有足够的干扰导致定期断开连接。这可能是一种可能性。

要避免同一设备的多个结果出现在 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
}

}

此外,请确保在刷新扫描时清除 HashSet

关于Android BLE 连接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com