2015-02-27 2 views
0

Я изучаю французский студент, и я изучаю язык Android самостоятельно. Мои друзья и я должны создать приложение для Android, основанное на технологии iBeacon. Несколько дней назад я обнаружил библиотеку AltBeacon, и я нашел ее потрясающей, но у меня есть некоторые вопросы, чтобы спросить об этом.Поиск iBeacon с использованием библиотеки AltBeacon

Во-первых, вы должны понимать, что я новичок в программировании, и мои вопросы будут для вас идиотами. Но, пожалуйста, мне действительно нужна помощь;)

Android предоставляет Bluetooth.LE Api, и я понял, что могу использовать метод startLeScan() для получения BluetoothDevice. Но если я хочу использовать библиотеку AltBeacon, которая является эквивалентным методом, который позволяет нам сканировать устройства iBeacon и получать объект Beacon?

Другой вопрос: Если я использую startLeScan() и получаю BluetoothDevice, как я могу преобразовать его в Beacon, чтобы использовать методы AltBeacon?

Прошу прощения за мои английские ошибки, надеюсь, мои вопросы будут понятны. Bye

ответ

0

Вы можете легко использовать Android Beacon Library для сканирования маяков и возвращать результаты, используя «Ранжирование API-интерфейсов», как описано здесь:

http://altbeacon.github.io/android-beacon-library/samples.html

Если вы хотите напрямую позвонить startLeScan() и использовать код библиотеки для преобразования результаты к объектам радиомаяка, вы можете вызвать следующий метод в обратном вызове сканирования:

Beacon beacon = beaconParser.fromScanData(scanData, rssi, bluetoothDevice)

Однако при использовании proprie tary beacon format (например, от Apple), вам нужно будет построить BeaconParser с правильной компоновкой. Это запатентованная информация, но вы можете выполнить поиск в Google, чтобы узнать, как правильно построить BeaconParser для проприетарных макетов.

+0

Спасибо вам за ваш ответ. Ваши помощники, и вы отлично поработали с этой бесплатной библиотекой. –

1

Я думаю, nv-bluetooth - это самый простой способ извлечения iBeacon из рекламных пакетов. Ниже приведен пример реализации метода onLeScan.

public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) 
{ 
    // Parse the payload of the advertising packet. 
    List<ADStructure> structures = 
     ADPayloadParser.getInstance().parse(scanRecord); 

    // For each AD structure contained in the advertising packet. 
    for (ADStructure structure : structures) 
    { 
     if (structure instanceof IBeacon) 
     { 
      // iBeacon was found. 
      IBeacon iBeacon = (IBeacon)structure; 

      // Proximity UUID, major number, minor number and power. 
      UUID uuid = iBeacon.getUUID(); 
      int major = iBeacon.getMajor(); 
      int minor = iBeacon.getMinor(); 
      int power = iBeacon.getPower(); 

      ........ 

См. "iBeacon as a kind of AD structures" для деталей.

+0

Но BLE неустойчив в android, поэтому не следует использовать способ «BLE scan». Ex. маяк уже выключен, но проверка BLE все еще обнаруживает его. Это неверно. –

1

Это то, что мы используем для обнаружения iBeacons и получения маякового объекта в службе Android с помощью библиотеки AltBeacon.

Настройте BeaconManager

BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this); 
beaconManager.setForegroundScanPeriod(5100); 
beaconManager.setForegroundBetweenScanPeriod(2000); 
beaconManager.setBackgroundScanPeriod(5100); 
beaconManager.setBackgroundBetweenScanPeriod(2000); 

//Parse IBeacon structure 
beaconManager.getBeaconParsers().add(new BeaconParser(). 
       setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 
beaconManager.bind(this); 

Start Ранжирование маяки

private void startBeaconRangeFinderService() { 
     beaconManager.setRangeNotifier(new RangeNotifier() { 

     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> beacons, org.altbeacon.beacon.Region region) { 
      try { 
       if (beacons.size() > 0) { 
        for (Beacon b : beacons) { 
         processYourBeaconInThisMethod(b); 
        } 
       } 
      } catch (Exception ex) { 
       Log.e(TAG_BEACON_ACTIVITY, "Error was thrown: " + ex.getMessage()); 
      } 
     } 
    }); 
    try { 
     beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
    } catch (RemoteException e) { 
     Log.e(TAG_BEACON_ACTIVITY, "Error was thrown: " + e.getMessage()); 
    } 
} 
Смежные вопросы