Как обнаружить пользователя рядом с собой?

Допустим, мое приложение установлено на многих аппаратах. Существует ли возможность программно отловить момент, когда любые два из этих аппаратов находятся на расстоянии нескольких метров друг от друга?

В принципе, сейчас практически в каждом устройстве есть блютуз и вайфай. Здесь возникает два вопроса:


1. Есть ли возможность реализовать такое через блютуз? В какую сторону копать, если такое осуществимо? В принципе, на эти устройства можно предварительно загружать какие-то данные, которые необходимы для коннекта.


2. Насколько я знаю, в андроид нет возможности коннекта peer-to-peer, а возможность режима точки доступа появилась только в версии 4.0 и выше (хотелось бы не отсекать старые устройства). Может быть есть какой-то другой подход?
  • Вопрос задан
  • 27420 просмотров
Пригласить эксперта
Ответы на вопрос 6
@cat_crash
Пробовать при помощи GPS и собственного server-side. Посылаешь координаты каждого у кого приложение, и на сервере смотришь кто из них в какой удаленности друг от друга
Ответ написан
@jimpanzer
Как вариант можно полагаться на то, находятся ли аппараты в одной wifi сети. Достаете BSSID всех сетей, которые видят аппараты и вперед.
Ответ написан
anmipo
@anmipo
В лесу/поле можно сравнивать GPS-координаты телефонов. Плюс — неплохая точность, минусы — энергопотребление и задержка при холодном старте GPS, нужно интернет-соединение с сервером, сложности работы в движущемся транспорте.

В офисе можно сравнивать списки доступных Wi-Fi сетей. Если оба телефона видят одни и те же точки доступа (с погрешностью на самые слабые/далёкие), и оных достаточно много — скорее всего, телефоны недалеко друг от друга. Плюс — быстро, минусы — возможны ложноположительные и ложноотрицательные ошибки, нужно интернет-соединение с сервером.

В тихом подвале без GPS, Wi-Fi и интернета — можно обмениваться аудиосигналами. Один телефон пикает, другой слушает. Плюсы — быстро, не нужен интернет; минусы — лишний шум, ложноотрицательные ошибки («не услышал»). Пикать можно или по расписанию, или просто чтобы один телефон звонил на другой :)

В других местах — Bluetooth: одни девайсы делают себя обнаруживаемыми (discoverable), другие сканируют доступные Bluetooh-устройства поблизости. Плюсы — неплохая точность, минусы — энергопотребление при частых проверках, задержка при сканировании (в старых версиях Bluetooth порядка 10 секунд, насчёт новых не знаю).
Ответ написан
Комментировать
GavriKos
@GavriKos
несколько метров — это смотреть только в сторону блутуса, по списку доступных вокруг устройств. GPS — неточен + не везде ловит. На WiFi полагаться нельзя +условия леса, getCellLocation() — слишком большой радиус
Ответ написан
Комментировать
@asidorov
Если еще актуально, то вот: https://itunes.apple.com/ru/app/mee2/id770196787?mt=8
Ответ написан
Комментировать
@Lolman
Software Engineer
Насколько я понимаю, речь не о peer-to-peer коннекте, а о факте обнаружения. В рамках одной платформы можно использовать Bluetooth для обнаружения Android-Android и BLE для iOS-iOS. Нужно записать некий уникальный токен в "имя устройства" и обнаружить его на другом. С кросс-платформенным обнаружением дела обстоят сложнее.

Я советую почитать статью на эту тему: https://habrahabr.ru/post/347954/. В ней подробно рассмотрены все способы решения этой задачи с их плюсами и минусами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы