Android O hat die Möglichkeit entfernt, die impliziten Übertragungen für eine WLAN-Statusänderung zu empfangen. Wenn Ihre App also geschlossen ist, können Sie sie nicht mehr empfangen. Die neue WorkManager
kann ausgeführt werden, wenn die Anwendung geschlossen ist. Ich habe ein wenig damit experimentiert, und es scheint ganz gut zu funktionieren:
Fügen Sie dies zu Ihren Abhängigkeiten hinzu:
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()
}
}
Denken Sie daran, dass dies nur ein schneller Test für eine einmalige Benachrichtigung war. Es gibt noch mehr zu tun, um immer benachrichtigt zu werden, wenn WiFi ein- und ausgeschaltet ist.
PS: Wenn die App Beenden erzwingen wird der Arbeiter nicht gestartet, es scheint WorkManager
storniert dann die Anfragen.
0 Stimmen
Ein Teil dieser Frage wurde bereits hier beantwortet, wie ich fand: stackoverflow.com/questions/4238921/
1 Stimmen
Es stellt sich aber immer noch die Frage, WANN diese Bedingungen überprüft werden sollen.
1 Stimmen
Ich würde gerne wissen, ob es Sendungen gibt, die von einem Rundfunkempfänger aufgefangen werden können?
1 Stimmen
Wie kann ich dies unter Android O tun, da implizite Broadcast-Empfänger wie Android.net.wifi.STATE_CHANGE nicht mehr im Manifest registriert werden dürfen (siehe developer.Android.com/guide/components/ ). Wenn wir es in der Anwendungsaktivität registrieren (z. B. onCreate), muss es in onStop() deregistriert werden, und wir werden keine WLAN-bezogenen Ereignisse mehr erhalten