2015-11-14 3 views
1

Имею отношение к https://github.com/AltBeacon/android-beacon-library-reference для моего проекта.Как заставить Android-приложение обнаруживать сигнал Eddystone?

В документации и некоторых комментариях я выяснил, что они по умолчанию получают сигнал altBeacon. Я хотел знать, как мы можем персонализировать его, чтобы читать другие различные форматы маяков, такие как Eddystone и iBeacon.

Поскольку это открытый исходный код, я хотел бы придерживаться его, а затем персонализировать (обновлять) соответственно.

Например нам нужно установить макет радиомаяка с использованием кода ниже:

beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25")); 

Edit: Я изменил setBeaconLayout часть кода, как это было предложено в ответ. Тем не менее он не работает.

Я использовал следующий фрагмент кода (см. Статью https://github.com/AltBeacon/android-beacon-library-reference). Я добавил эту часть setBeaconLayout, чтобы получить сигнал eddystone, который, к сожалению, я не получаю. Но если я удалю то же самое, я могу получить сигналы altBeacon.

public void onCreate() { 
    super.onCreate(); 
    BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().clear(); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
    setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); //for Eddystone... 
    Log.d(TAG, "setting up background monitoring for beacons and power saving"); 
    Region region = new Region("backgroundRegion",null, null, null); 
    regionBootstrap = new RegionBootstrap(this, region); 
    backgroundPowerSaver = new BackgroundPowerSaver(this); 
} 

Может ли кто-нибудь помочь мне в этом? Как заставить приложение получать сигнал eddystone?

P.s Может кто-то также предоставить список образцов setBeaconLayout для разных сигналов. Могу предположить, что, если мы просто изменить ту часть, мы можем принимать сигналы (для формата сигнала, для которого мы устанавливаем расположение.

Большое спасибо заранее.

ответ

0

Существовал ошибка в версии 2.6 Android Beacon библиотека используется в справочном приложении по состоянию на 15 ноября 2015. Это ошибка предотвратить обнаружение Eddystone маяков с использованием спецификации по умолчанию области с тремя нулевыми идентификаторами.

Эта ошибка была исправлена ​​ как в версии 2.6.1 библиотеки. Я обновил справочное приложение, чтобы использовать версию 2.7 16 ноября 2015 года, которая включает исправление ошибки.

Простое решение заключается в использовать последнюю копию эталонного приложения или изменить копию, вы должны изменить линию от:

compile 'org.altbeacon:android-beacon-library:[email protected]' 

в

compile 'org.altbeacon:android-beacon-library:[email protected]' 
+0

Спасибо. Теперь я могу обнаружить UID eddystone.Спасибо за исправление ошибки, но можете ли вы подробно рассказать о том, что именно проблема? Из этих трех идентификаторов можно использовать для обнаружения определенных маяков, влияет ли обновление на это? Большое спасибо. – driftking9987

+0

С ошибкой 'Region' действительно соответствовал' Beacon', если у него было меньше идентификаторов. Область подстановочных настроек по умолчанию имеет три идентификатора нулевой точки и только Eddystone-UID 2. Описание изменения находится в первой маркерной точке примечаний к выпуску 2.6.1: https://github.com/AltBeacon/android-beacon-library /releases/tag/2.6.1 Это фиксация, исправленная ошибка: https://github.com/AltBeacon/android-beacon-library/commit/2b6b27c0eb4a1589cdffb3981fe550af1e7e6c23 И это коммит, который создал ошибку: https: // github.com/AltBeacon/android-beacon-library/commit/341be1449743da6137b552d1e9e9544774f1c30 – davidgyoung

0

В последнее время я изо всех сил, чтобы достичь того же, и получил решение для него here. . Также вам необходимо настроить маяк, поместив его в режим UDID Eddystone. Просто изменив setBeaconLayout, мы не сможем обнаружить другой формат маяка .Eg - Формат UID Eddystone - это не то же самое, что и iBeacon UID формат Вы можете исследовать различные форматы маяковых сигналов, используя что-то вроде: mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));.

Так что ваш код должен выглядеть,

public class MyApplication extends Application implements BootstrapNotifier { 
private static final String TAG = "MyApplication"; 
private RegionBootstrap regionBootstrap; 
private BackgroundPowerSaver backgroundPowerSaver; 
private BeaconManager mBeaconManager; 

public void onCreate() { 
    super.onCreate(); 
    mBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this); 
    mBeaconManager.getBeaconParsers().clear(); 
    mBeaconManager.getBeaconParsers().add(new BeaconParser(). 
     setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); 
    Region region = new Region("my-beacon-region", null, null, null); 

    regionBootstrap = new RegionBootstrap(this, region); 

    backgroundPowerSaver = new BackgroundPowerSaver(this); 
} 

@Override 
public void didEnterRegion(Region region) { 

     Log.d("radbeacon", "Beacon detected in region"); 
} 

@Override 
public void didExitRegion(Region region) { 

    Log.d("radbeacon", "Beacon out of region"); 
} 

@Override 
public void didDetermineStateForRegion(int i, Region region) { 
     //Ignore 
    } 

} 

Также не забудьте поставить маяк в Eddystone режиме UID, а затем включите маяк на так, что он может быть обнаружен с помощью приложения.

+0

Я попытался добавить ' BeaconParser.EDDYSTONE_UID_LAYOUT', но это не помогает мне. Я использую приложение locate для отправки сигналов eddystone, но приложение их не получает. И как вы думаете, какой подход должен быть при настройке «APP», чтобы читать любые виды маяков. – driftking9987

+0

Проверьте эту ссылку, чтобы узнать больше о маяках здесь -> https://www.youtube.com/watch?v=TZf4WquRGJU –

+0

Не нужно 'mBeaconManager.bind (this);'? Btw Я попытался добавить это, но он просто не позволит мне добавить это! И спасибо за видео, переживая это. – driftking9987

0

Код выглядит хорошо для меня. Убедитесь, что ваш маяк действительно передает кадр Eddystone-UID. Можете ли вы попробовать приложение Beacon Locate из Google Play Store? Он основан на той же библиотеке и использует аналогичный фрагмент кода для показанного в вопросе. Я использую это приложение с похожим кодом для успешного обнаружения маяков Eddystone-UID.

Если это не работает, пожалуйста, включите отладку низкого уровня в вашем приложении, вызвав mBeaconManager.setDebug(true) и вставить вывод LogCat который выглядит примерно так:

D/BeaconParser﹕ This is not a matching Beacon advertisement. (Was expecting be ac. The bytes I see are: 0201061aff4c0002153d9d4c66fb0f11e3ab64c82a143314d68079186cb61c09426c756542617220426561636f6e20383833333134453537383038000000

Это сообщит нам байты маяк действительно передает, поэтому мы можем видеть, находится ли он в формате Eddystone-UID.

РЕДАКТИРОВАТЬ: Проблема, похоже, была ошибкой в ​​версии Android Beacon Library, которая была добавлена ​​с помощью справочного приложения до 15 ноября 2015 года. Дополнительную информацию см. В моем другом ответе.

+0

Am, используя приложение Beacon Locate для тестирования. Если я создаю базовую RangingActivity (только ваш образец) 'public void onResume() { super.onResume(); mBeaconManager = BeaconManager.getInstanceForApplication (this.getApplicationContext()); // Обнаружение основного кадра Eddystone-UID: mBeaconManager.getBeaconParsers(). Добавить (новый BeaconParser(). setBeaconLayout ("s: 0-1 = feaa, m: 2-2 = 00, p: 3-3 : -41, я: 4-13, я: 14-19")); mBeaconManager.bind (это); } ', я могу обнаружить eddystone uid .. (1/2) – driftking9987

+0

Но если я использую https://github.com/AltBeacon/android-beacon-library-reference, добавлю только beaconManager.getBeaconParsers(). Чисто(); beaconManager.getBeaconParsers(). Добавить (новый BeaconParser(). setBeaconLayout (BeaconParser.EDDYSTONE_UID_LAYOUT)); 'в функции onCreate, оставив любую другую вещь, как она есть, только для целей тестирования, я не получаю никакого eddystone UID .. Моя основная проблема заключается в том, почему я не могу обнаружить eddystone? Пожалуйста, скажите свое мнение. Благодарю. – driftking9987

+0

Я вижу проблему. См. Мой другой ответ. – davidgyoung

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