2013-07-26 2 views
39

Я ищу способ обнаружения iBeacon (функция iOS 7.0) с устройства Android. Я читал документацию на Android, где, похоже, iBeacon - это своего рода сервер GATT, который отправляет свою позицию. Хотя в документации на Android говорится, что я не должен опросить эти данные, но для обнаружения это было бы необходимо.Совместимость iBeacon bluetooth с низкой энергией с Android 4.3

Я много говорю, но эта тема довольно новая (я даже создал новый тег ), поэтому я был бы рад, если бы получил некоторые ссылки на ressources из мира iOS, который описывает реализацию. Также, если есть некоторые Android-файлы, которые я еще не нашел, было бы хорошо.

+0

Я не очень хорошо знаком с платформой iOS, но могу ли она поддерживать BTLE-сервер или просто клиент? Оказывается, Android BTLE поддерживает только клиент, даже если документация предполагает, что он может поддерживать сервер. На самом деле можно создать сервер, но он не может рекламировать. –

+0

iOS поддерживает сервер. Если вы посмотрите на общедоступный образец AirLocate (в частности, ALConfigurationViewController) из WWDC 2013, вы увидите, как они настраивают сервер для рекламы. Фактический код для рекламы находится глубоко внутри проприетарного кода Apple, поэтому было сложно воспроизвести его на Android, но вполне можно настроить любое приложение iOS как iBeacon. – DesignatedNerd

+0

Какие устройства вы использовали? Это было бы действительно интересно. – MrningLemn

ответ

67

EDIT: Библиотека ниже теперь была снесена, а библиотека замены теперь доступна здесь:

https://github.com/AltBeacon/android-beacon-library


Я перенес SDKs iOS7 IBeacon на Android, и был способные видеть стандартные iBeacons и оценивать их диапазон. Код доступен здесь:

https://github.com/RadiusNetworks/android-ibeacon-service

Для этого, чтобы работать, вам нужно Android 4.3, который представил Низкоэнергетиче- API-интерфейсы Bluetooth. Вам также понадобится устройство с чипсетом с низким энергопотреблением.

Если вы не хотите использовать полную библиотеку выше, вы можете перевернуть свой собственный. iBeacons просто передают рекламу BLE раз в секунду, которая начинается с известной последовательности байтов. Вам просто нужно сказать Android, чтобы выполнить сканирование BLE, получить каждую рекламу и искать ту, которая начинается с известной последовательности байтов iBeacon. Затем вы можете разобрать поля iBeacon. Вот код шоу, как это делается:

https://github.com/RadiusNetworks/android-ibeacon-service/blob/master/src/com/radiusnetworks/ibeacon/IBeacon.java#L177-L231

+1

Будет ли http://developer.samsung.com/ble работать для более ранних версий Android? Я собираюсь выяснить для себя (надеюсь, скорее раньше, чем позже), но подумал, что я задам этот вопрос и здесь. –

+0

Нет, Samsung BLE SDK является совершенно другой реализацией, чем тот, который является родным для Android 4.3. Теоретически можно было бы создать версию Android iBeacon Library, которая будет работать с Samsung BLE SDK, но это потребует многого переписывания. Учитывая, что большинство, если не все устройства Samsung с BLE, вероятно, получат обновление до Android 4.3 в ближайшие несколько месяцев, просто не стоит пытаться портировать библиотеку Android iBeacon для Samsung BLE SDK. – davidgyoung

+0

@MarkPeterson очень заинтересовано узнать, сможете ли вы работать с более ранними версиями. –

0

Я не совсем понял, что вы имеете в виду, могли бы вы предоставить ссылки на документацию, в которой говорилось, что вы не должны опросить данные?

Но мне кажется, что iBeacon работает как сервер, что для меня смешно. Разве это не значит найти другие устройства, а не сам телефон?

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.position_quality.xml

Это характеристики, которые он использует, хотя. Для меня это звучит так, что устройства, которые вы ищете, являются «маяками», а сам телефон является просто слушателем. Таким образом, вы не будете опробовать данные EHPE и EVPE, но вы должны действительно слушать его изменения или «трансляции».

Я тоже к этому отношусь сам и не могу найти никакой конкретной документации.

Несмотря на то, что в приведенной ниже ссылке есть ссылка для загрузки в верхнем углу, которая предоставит вам полную документацию в формате PDF. Там вы, вероятно, найдете больше ответов.

2

Единственная загвоздка здесь, чтобы обнаружить маяк даже приложение не работает. В отличие от iOS7, это не поддержка. В iOS7, когда вы на своем BT, он автоматически уведомит вас, когда вы войдете в область зарегистрированного iBeacon.

Я реализовал iBeacon в Android 4.3 API с помощью IntentService plus AlarmManager. Для сканирования каждые 30 секунд (для экономии заряда аккумулятора оно должно быть больше). Он хорошо работает для пользователя.Только когда найден соответствующий файл uuid/major/minor, он вызывает уведомления. В противном случае он снова заснет и снова проснется.

Я думаю, что это решение для вашего вопроса.

+0

Я обнаружил, что повторное сканирование мешает звуку Blutooth. Должен быть лучший путь, чем это. –

+0

В библиотеке altbeacon есть образец, включающий запуск приложения. http://altbeacon.github.io/android-beacon-library/samples.html –