Android O удалил возможность получать неявные трансляции для изменения состояния Wi-Fi. Поэтому, если ваше приложение закрыто, вы не сможете их получить. У нового WorkManager
есть возможность запускаться, когда ваше приложение закрыто, поэтому я немного поэкспериментировал с ним, и, похоже, он работает довольно хорошо:
Добавьте это в свои зависимости:
implementation "android.arch.work:work-runtime:1.0.0-alpha08"
WifiConnectWorker.kt
class WifiConnectWorker : Worker() {
override fun doWork(): Result {
Log.i(TAG, "I think we connected to a wifi")
return Result.SUCCESS
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
val workManager = WorkManager.getInstance()
val request = OneTimeWorkRequest.Builder(WifiConnectWorker::class.java)
.setConstraints(Constraints.Builder()
.setRequiredNetworkType(UNMETERED)
.build())
.build()
workManager.beginUniqueWork("watch_wifi", REPLACE, request).enqueue()
}
}
Имейте в виду, что это была всего лишь быстрая проверка одноразового уведомления. Чтобы всегда получать уведомления, когда Wi-Fi включается и выключается, нужно еще поработать.
PS: Когда приложение закрывается принудительно , рабочий не запускается, похоже WorkManager
, тогда отменяет запросы.