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 WorkManager
zaman istekleri iptal ediyor gibi görünüyor .