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

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

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

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

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

ОБНОВИТЬ

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

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

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

    Параметры, которые я могу видеть

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

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

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

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

    Подводить итоги

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

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

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

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

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