Можно ли найти другие близлежащие телефоны?

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

Я планирую приложение, требующее подключения к Интернету, поэтому я впервые подумал, что нужно использовать GPS, как описано в iOS Найти другие соседние устройства (местоположения GPS), но это требуют постоянной передачи данных на сервер для обновления местоположения пользователя с использованием как пропускной способности, так и батареи (не говоря уже о ресурсах сервера). Похоже, что GPS, похоже, займет некоторое время, чтобы получить какое-то точное исправление, и хотя я бы не хранил исторические данные, я бы не ожидал, что пользователи доверяют мне такую ​​личную информацию (также они не должны!)

Я знаю, что есть собственные технологии, такие как Sony NFC, но это слишком узкий фокус для использования в приложении, которое я хотел бы быть агностиком для устройства и ОС. Какие еще существуют варианты? Предполагая, что пользователь готов предоставить приложению соответствующие разрешения, какие другие методы могут позволить одному устройству найти другой ближайший, в пределах 10-15 метров, который практичен для большой (миллионной) пользовательской базы? Является ли HTML5 Geolocation лучшим путем? Или GPS - единственный реальный вариант?

Я нашел использовать Android GPS для обнаружения и подключения к другим телефонам, но надеялся, что последние несколько лет откроют дополнительные возможности.

UPDATE

Спасибо за все ответы. Чтобы ответить на некоторые вопросы, поставленные в комментариях и ответах, мне показалось, что я бы описал, как я ожидаю, что приложения/устройства будут взаимодействовать.

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

Оттуда легко справиться с взаимодействием между двумя устройствами. Найти этих близких пользователей является для меня точкой привязки.

Ответ 1

Параметры, которые я вижу

  • Bluetooth (BT). Я не знаю, если я не слишком скептически отношусь к этому, но вижу пару проблем. На короткие расстояния. Самое большое потребление энергии. Максимум 7 одноранговых подключений одновременно (но, возможно, достаточно...). Большим преимуществом является то, что многие устройства поддерживают BT.

  • BT LE (низкая энергия). Хорошо, это помогает проблемы потребления энергии. Но, требуется Android 4.3.

  • Прямой Wi-Fi (он же P2P). Я сделал это, я немного разочарован. Проблема в том, что для него требуется Android 4.0 или выше. Хуже того, некоторые устройства не имеют необходимого оборудования. Я запустил WiFiDirectDemo из образцов Android на Samsung Xperia Miro ST23i. Нажав на "поиск", единственное, что я получил, это тост "включить WiFi P2P - в ваших настройках". Я нажал на все в этих настройках, есть только обычный WiFi и другие вещи, не говоря уже о Direct или P2P. Xperio Miro просто не поддерживает WiFi Direct.

  • соединение WiFi с сервером через геолокацию через интернет +. Сервер поддерживает позиции пользователей и отвечает на вопросы типа "кто 20 футов в моем диапазоне?". Проблемой может быть точность геолокации. Если стены толстые или вы находитесь в месте на земле с несколькими спутниками - это может быть очень неточно.

Подводя итог

Существует большая вероятность того, что кто-то WiFi будет включен все время, чем BT. BT также имеет некоторые временные рамки, после которых он выключен (они делают это таким образом, чтобы, вероятно, сэкономить аккумулятор). Таким образом, WiFi кажется лучшим выбором, чем BT.

Если WiFi Direct достаточно популярен для вас, я бы попробовал. Если нет, вариант номер 4 кажется лучшим. Это не идеально, я знаю, но на данный момент трудно прийти с чем-то лучшим (нам все еще нужно развитие технологий, перспективы Wi-Fi перспективны).

Ответ 2

Я бы использовал центральный серверный подход. Каждый телефон отправляет данные о местоположении на сервер. Сервер уведомляет других пользователей, когда они находятся в зоне действия. Чтобы ограничить использованные данные, отправляйте только позиции, когда устройство сообщает движение более X метров.

Кроме того, рассмотрите возможность использования кнопки Ping. Пользователь нажимает его, чтобы отправить позицию, когда они хотят найти кого-то поблизости. Данные о местоположении будут отправляться только на этот пинг. Это будет использовать очень мало энергии и обеспечить хорошую конфиденциальность.

Возможно, будет возможно узнать подробности о подключенной точке доступа Wi-Fi. Если вы можете получить MAC-адрес точки доступа или шлюза, вы можете отправить это как своеобразную позицию. Все игроки на том же Gateway будут рядом.