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()
// Add constraint to start the worker when connecting to WiFi
val request = OneTimeWorkRequest.Builder(WifiConnectWorker::class.java)
.setConstraints(Constraints.Builder()
.setRequiredNetworkType(UNMETERED)
.build())
.build()
// The worker should be started, even if your app is closed
workManager.beginUniqueWork("watch_wifi", REPLACE, request).enqueue()
}
}
Имейте в виду, что это был только быстрый тестдля разового уведомления.Есть еще много работы, чтобы всегда получать уведомления, когда WiFi включен и выключен.
PS: Когда приложение принудительно завершает работу , рабочий не запускается, кажется, WorkManager
отменяет запросы.