Android - определить, есть ли рядом другие пользователи моего приложения - PullRequest
0 голосов
/ 18 марта 2019

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

  • Геолокация не вариант, так как в помещении это слишком неточно.
  • Приложение работает только на принадлежащих компании телефонах, которые находятся на территории компании, конфиденциальность не имеет значения.
  • Все устройства всегда подключены к одной и той же сети Wi-Fi, и BT всегда включен.

Моя идея состоит в том, чтобы определять, находятся ли пользователи на небольшом расстоянии друг от друга, путем периодического сканирования Bluetooth и проверки результатов по списку MAC-адресов, которые содержат все устройства, на которых установлено приложение. MAC-адреса всех устройств отправляются на сервер, после чего устройства получают этот список MAC-адресов с сервера для сравнения с результатами сканирования BT.

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

Подойдет ли реализация, основанная на Google Nearby или BT, для моих нужд?

Можно ли обнаружить присутствие близлежащего устройства, если его не обнаружить?

Поскольку срок службы батареи является проблемой (необходимо делать это по крайней мере 8 часов в день), BLE - вариант?

1 Ответ

1 голос
/ 20 марта 2019

Вы почти наверняка можете справиться с 8 часами в день, если телефоны не используются для чего-то еще. Однако есть много переменных.

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

Если телефоны работают с Marshmallow или более поздней версией, у них есть режим ожидания, который прерывает сканирование. Это можно обойти с помощью AlarmManager, JobService / Dispatcher или WorkManager. Это может значительно сократить срок службы батареи.

Если телефоны работают под управлением Oreo или более поздней версии, им требуется служба переднего плана (постоянное уведомление), чтобы предотвратить автоматическое уничтожение приложения операционной системой для экономии заряда батареи. Приложение также должно быть занесено в белый список от оптимизации батареи, потому что даже с сервисом переднего плана приложение все равно будет убито ОС.

Наконец, сканирование и радиовещания и с использованием служб определения местоположения довольно дорого с точки зрения батареи. Если вы пытаетесь кластеризовать телефоны и угадать их местоположение на основе того, какие другие телефоны находятся поблизости, на каком-то уровне вам все же понадобятся данные о местоположении на телефонах, чтобы выяснить, где они находятся.

Тебе гораздо лучше просто сканировать. Вы можете покрыть имущество вашей компании маяками, где указано местоположение каждого отдельного маяка. Когда телефон «входит в регион» (находится в пределах досягаемости радиомаяка), он должен отправить что-то вашему API, сообщив, какой радиобуй он только что обнаружил. Это скажет вам, в какой комнате / зоне он находится.

Еще одним менее кричащим (и, возможно, менее точным) способом отслеживания всего будет использование IP-адресов точек беспроводного доступа, к которым они подключены. Используйте WorkManager , чтобы периодически обновлять API с помощью уникального идентификатора телефона и IP-адреса точки доступа. Ваш ИТ-отдел должен знать местонахождение каждого из них. Таким образом, вы получаете достаточно хорошее отслеживание и практически не разряжаете батарею.

...