Android O усунув можливість отримувати неявні трансляції для зміни стану wifi. Тож якщо ваш додаток закрито, ви не зможете їх отримувати. Новий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
, скасовує запити тоді.