Android O, bir wifi durumu değişikliği için örtük yayınları alma olasılığını kaldırdı. Dolayısıyla uygulamanız kapalıysa, bunları alamazsınız. Yeni WorkManager, uygulamanız kapandığında çalışma yeteneğine sahip, bu yüzden biraz denedim ve oldukça iyi çalışıyor gibi görünüyor:
Bunu bağımlılıklarınıza ekleyin:
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()
}
}
Bunun bir kerelik bildirim için hızlı bir test olduğunu unutmayın. WiFi açıldığında ve kapatıldığında her zaman bildirim almak için yapılacak daha fazla iş var.
Not: Uygulama zorla bırakıldığında , çalışan başlatılmaz, o WorkManagerzaman istekleri iptal ediyor gibi görünüyor .