Я хочу разработать приложение, которое может предотвратить подключение к сети Wi-Fi, если я этого не одобряю. Я хочу иметь возможность запрашивать MAC-адрес точки доступа и сравнивать его со списком известных адресов, соответствующих SSID. Цель приложения - защитить пользователей от случайного подключения к вредоносным точкам доступа, например к точкам доступа, которые могут быть созданы с помощью ананасовые устройства.
Из моих исследований мне не ясно, как я смогу достичь этой цели. Такие вопросы, как Как получать уведомления об изменении статуса сети Wi-Fi? объясните, как обнаружить соединение произошло, но для моего варианта использования это уже слишком поздно.
Ни ConnectivityManager
, ни WifiManager
, похоже, не предлагают методов для добавления слушателей, которые могли бы прервать текущее соединение.
Некоторые мысли, которые у меня были по поводу решения:
Установите себя в качестве прокси-сервера и примите решение, пропускать ли данные. Однако это не похоже на вариант, основанный на Применяются ли настройки прокси-сервера Android ко всем приложениям на устройстве? (подсказка: ответ -« Нет »).
Замените существующий менеджер Wi-Fi чем-нибудь, созданным мной. Однако мне очень трудно найти в руководствах для разработчиков Android какую-либо информацию о замене системных компонентов. Следовательно, я не уверен, что это возможно на телефонах без рутирования.
Хранить сетевые пароли в моем приложении и устанавливать пароли в диспетчере WiFi на бессмысленные значения. Затем перехватите широковещательное сообщение, которое предупреждает о сбое соединения (предположительно, что-то вроде. Мне приходит в голову, что устройства типа ананас, вероятно, будут принимать любой пароль, что делает этот подход недействительным.WifiManager.WPS_AUTH_FAILURE
), и выборочно решите снова подключиться к этой сети. Может быть возможным (если уродливым) решением, но могу ли я вернуть пароль к бессмысленному значению, пока сеть все еще подключена, чтобы гарантировать, что мы не подключаемся незаметно к другому SSID с тем же именем? Я не уверенНайдите способ предотвратить автоматическое подключение Android к известным сетям (т. Е. К сетям, которые использовались ранее или для которых хранится пароль). Тогда я мог управлять всеми подключениями / отключениями из моего приложения. Однако я не вижу, как это сделать вручную на моем телефоне, поэтому я сомневаюсь, что это возможно программно.
Может ли кто-нибудь предложить подход, который работал бы на телефоне без рутирования?
ScanResult
должен предоставлять BSSID, верно? Если так, я могу получить это отдельно. - person Duncan Jones   schedule 11.11.2014