Android BLE连接断开连接

时间:2015-08-10 15:54:36

标签: android android-activity android-bluetooth android-ble

我正在编写一个扫描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);

}

}

1 个答案:

答案 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 } }