2014-06-23 3 views
1

Я хочу подключиться к устройству Bluetooth и записать значение, чтобы характеристики были максимально быстрыми. На данный момент мой код приводит к плохим результатам:Время соединения/кэширование Bluetooth LE

1) Сканирование BLE - как вы можете видеть, у меня есть жесткий адрес MAC-адреса устройства, к которому я хочу подключиться. Я также получаю временную метку метода connectGatt invoke.

@Override 
    public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { 

     if(device.getAddress().equals("F1:9F:EE:6B:AB:83")) { 
      mConnectedGatt = device.connectGatt(this, false, mGattCallback); 
      start = System.currentTimeMillis()/1000; 
     }; 
    } 

2) onConnectionChanged - я получаю Enother метку времени и вычитать их, чтобы узнать, сколько подключения операция длилась

@Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 
     super.onConnectionStateChange(gatt, status, newState); 

     end = System.currentTimeMillis()/1000; 
     Log.d("QWERTY", "TIME " + (end - start)); 

     if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) { 

      Log.d("QWERTY","Success"); 
      gatt.discoverServices(); 

     } else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED) { 

      Log.d("QWERTY","Disconnected"); 

     } else if (status != BluetoothGatt.GATT_SUCCESS) { 
      Log.d("QWERTY","Connection error"); 
      gatt.disconnect(); 
     } 
    } 

И есть моя главная проблема. Время между device.connectGatt и onConnectionStateChange занимает от 3 до 8 секунд, что слишком далеко для меня. Я был бы счастлив, если бы это было около 1 секунды. Характеристика записи занимает меньше секунды в onServicesОткрытый прослушиватель, так что это не проблема.

Вопрос 1): Есть ли способ ускорить это время соединения?

Вопрос 2): Есть ли способ сохранить соединение Bluetooth с устройством в кеше, поэтому он будет длиться долго при первом подключении и в течение последующих вызовов будет быстрее?

Вопрос 3): Любые другие предложения, что могло бы заставить его работать быстрее? Может быть, мой подход плох.

ответ

2

1) да, ваше периферийное устройство должно обеспечивать лучшие параметры интервала подключения при подключении. После обнаружения служб/характеристик вы всегда можете замедлить их, чтобы сохранить батарею при длительном подключении, если вам нужно.

2) склеивание может помочь для будущего подключения.

3) Если у вас есть много услуг/характеристик, потребуется больше времени, чтобы обнаружить их и создать таблицы дескрипторов в стеке нижнего уровня. С iOS вы должны отправить min-connection-интервал 20 мс (32) и максимум 40 мс (64), но вы можете взломать его с 10 мс-20 мс, и вы получите интервал 18-19 мс. На Android это может быть слишком агрессивным и может привести к отказу Samsung. Поэтому попробуйте [20; 40 мс]

+0

Благодарим за отзыв. Я собираюсь попробовать что-то и сообщить, если помог :) – F1sher

Смежные вопросы