Android O đã loại bỏ khả năng nhận các chương trình phát sóng ngầm để thay đổi trạng thái wifi. Vì vậy, nếu ứng dụng của bạn bị đóng, bạn sẽ không thể nhận được chúng. Cái mớiWorkManager
có khả năng chạy khi đóng ứng dụng của bạn, vì vậy tôi đã thử nghiệm một chút với nó và nó dường như hoạt động khá tốt:
Thêm phần này vào phần phụ thuộc của bạn:
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
}
}
ChínhActivity.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()
}
}
Hãy nhớ rằng đây chỉ là một thử nghiệm nhanh cho thông báo một lần. Có nhiều việc phải làm để luôn được thông báo khi bật và tắt WiFi.
PS: Khi ứng dụng bị buộc thoát , công nhân không được khởi động, có vẻ như WorkManager
đang hủy các yêu cầu sau đó.