2016-03-28 4 views
0

Мое приложение не использует маяки (по крайней мере, не в общем смысле). Вариант использования - постоянное фоновая проверка периферийных устройств BLE, соответствующих определенному формату, затем подключение к этим периферийным устройствам и передача/прием данных и разъединение (возможно, это происходит более одного раза).Использование AltBeacon в качестве обертки для сканирования/подключения BLE

Устойчивость и надежность Bluetooth LE на Android оставляет желать лучшего, особенно если поддерживаются более ранние версии API (18+), как и я. AltBeacon, похоже, представляет собой опытную библиотеку, которая обрабатывает множество странных краевых случаев и тонкостей в управлении Android Bluetooth LE (по крайней мере, со стороны сканирования). Я хотел бы использовать эту библиотеку для сканирования и идентификации моих периферийных устройств, а затем для подключения к ним самостоятельно. Кто-нибудь знает, как я мог бы это достичь?

ответ

2

Хотя Android Beacon Library действительно не предназначена для сканирования служб bluetooth, есть определенные случаи, когда это может быть удобно для этой цели. Однако следует предупредить, что это противоречит текстуре его дизайна и заставляет вас сделать несколько довольно уродливых хаков. Если у таких хаков ваши глаза истекают кровью, тогда не читайте дальше! Для тех, кто может выдержать это, вот что вам нужно сделать:

  • Установите анализатор радиомаяка, который будет выглядеть для ГАТТ службы UUID. Вы должны соответствовать по нескольким байтам в UUID службы, а совпадения библиотеки предназначены только для нескольких байтов за раз. Поэтому, если у вас есть UUID службы GATT 00010203-0405-0607-0809-0a0b0c0d0e0f, вы должны взять первые три байта: 00,01,02 и использовать их в качестве подходящего выражения. Поскольку выражение соответствия имеет различную ориентацию, вам необходимо изменить порядок байтов на 02,01,00. Таким образом, вы в конечном итоге с кодом, как это:

    BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
         setBeaconLayout("m:0-2=020100,i:0-15l,p:15-15")); 
    
  • Старт ранжирования на основе области, которая соответствует вашей полной ГАТТ Service UUID. (Опять же, вы должны заменить UUID с этим вашей службы.):

    Region gattServiceRegion = new Region("gattServiceRegion", 
         Identifier.parse("00010203-0405-0607-0809-0a0b0c0d0e0f"), null, null); 
    beaconManager.setRangeNotifier(this); 
    beaconManager.startRangingBeaconsInRegion(region); 
    

Теперь библиотека сделает обратный вызов к классу didRangeBeaconsInRegion метод каждый раз, когда он видит объявление о том ГАТТ службы UUID , Таким образом, вы знаете, что это поблизости, и вы можете получить все энергосбережение, запуск фона и другие преимущества библиотеки. Проблема в том, что библиотека не предоставляет никакой ссылки на необработанный объект BluetoothDevice, необходимый для вызова connectGatt(...).

Поэтому, если вы не измените исходный код библиотеки, вам все равно придется использовать необработанные API сканирования, как только вы знаете, что маяк находится вокруг, чтобы получить эту ссылку. Вы должны решить, стоит ли использовать библиотеку для всех этих проблем, учитывая, что вам нужно использовать необработанные API-интерфейсы сканирования, чтобы получить соединение BluetoothDevice, чтобы сделать соединение.

+0

Спасибо за информацию! – jcady

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