У меня есть приложение, которое должно знать, когда пользователь подключается к определенной сети Wi-Fi.Эта беспроводная сеть может предоставлять или не предоставлять пользователю доступ в Интернет.
При таргетинге на Android v25 и ниже мы можем просто использовать BroadcastReceiver
, который намеренно фильтрует для android.net.wifi.STATE_CHANGE
в манифесте.С v26, однако, это больше не так, кажется. Документация гласит :
Начиная с Android 8.0 (уровень API 26), система накладывает дополнительные ограничения на получателей, объявленных в манифесте.Если ваше приложение предназначено для уровня API 26 или выше, вы не можете использовать манифест для объявления получателя для большинства неявных широковещательных рассылок (широковещательных рассылок, которые не ориентированы конкретно на ваше приложение).Вы по-прежнему можете использовать зарегистрированный в контексте приемник [sic], когда пользователь активно использует ваше приложение.
Кроме того, Google требует, чтобы представления приложений были нацелены на последний уровень API.Итак, похоже, что мы должны зарегистрировать широковещательный приемник с действительным Context
.
Тогда мой вопрос, как мы можем запустить некоторый код всякий раз, когда устройство подключается к определенному Wi-Fiсеть, которая может не обеспечивать подключение к Интернету, и не только до тех пор, пока действует Context
?Является ли единственным решением зарегистрировать его с действительным Context
, прислушиваться к моменту, когда этот контекст будет уничтожен, установить на секунду сигнал тревоги, который создает новый Context
, и снова зарегистрировать получателя?Кажется, что это противоположно тому, что они хотят, чтобы мы делали, но также и единственный способ сделать это.