Ich habe im Internet gesucht und konnte die Antwort auf meine Frage nicht finden. Mein Problem ist es, die Akku-Level-Information nur einmal zu bekommen, z. Aufruf der Funktion getBatteryLevel()
. Es gibt nur Lösungen, die unter Verwendung BroadcastReceiver
implementiert werden, aber wie ich weiß, wird es jedes Mal auf Battery Level Change-Ereignis aufgerufen werden. Bitte, sag mir, wie kann ich diese Information nur einmal bekommen?Holen Sie den Akkustand nur einmal mit Android SDK
Antwort
Die Intent.ACTION_BATTERY_CHANGED
Sendung ist eine sogenannte "Sticky Broadcast". Da dies klebrig ist, können Sie sich für die Übertragung mit einem Null-Empfänger registrieren, der nur die Batterieladung eine Zeit erhält, wenn Sie registerReceiver
anrufen.
Eine Funktion den Ladezustand der Batterie zu erhalten, ohne Updates zu erhalten etwas wie dies aussehen würde:
könnenpublic float getBatteryLevel() {
Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
// Error checking that probably isn't needed but I added just in case.
if(level == -1 || scale == -1) {
return 50.0f;
}
return ((float)level/(float)scale) * 100.0f;
}
Weitere Daten aus dieser Dauerhaften Broadcast gezogen werden. Mit dem zurückgegebenen batteryIntent
können Sie auf weitere Extras zugreifen, wie in der Klasse BatteryManager
beschrieben.
Diese Methode kann jetzt nicht von einem Empfänger (z. B. einem Widget) aus aufgerufen werden. Kennen Sie eine andere Möglichkeit, den Akkustatus zu ermitteln, der in der onUpdate() -Methode eines Widgets ausgeführt werden kann? –
Wenn Sie dies über ein Widget tun, müssen Sie 'registerReceiver' so aufrufen: 'getApplicationContext(). RegisterReciever (...)' damit es funktioniert. – MCeley
Ich habe einen Kontext und kann es anrufen, aber der Anruf ist nicht innerhalb eines Empfängers erlaubt, diese oder Null als der erste Parameter "Empfänger" übergeben. Log-Nachricht ist sehr explizit, dass Sie nicht von einem Empfänger aus anrufen können. –
- 1. Holen Sie einzelne Attribute nur einmal je
- 2. facebook sdk nur einmal anmelden webapp
- 3. Holen Sie ein Element eines Arrays nur einmal
- 4. So erhalten Sie den Akkustand mit 1% Genauigkeit in ios
- 5. So überwachen Sie den Akkustand und Statusänderungen mit swift
- 6. Android: "Splash-Screen" nur einmal
- 7. GPS Android - nur einmal positionieren
- 8. Android ProgressBar.setProgressDrawable funktioniert nur einmal?
- 9. onReceive funktioniert nur einmal android
- 10. Holen Sie sich den aktuellen Standort schnell und einmal in Android
- 11. Klicken Sie nur einmal (js)
- 12. android Absicht action_send Option nur einmal
- 13. Können wir den Laptop-Akkustand mit .net erkennen?
- 14. layoutAnimation funktioniert nur einmal
- 15. Android RX - Observable.timer nur einmal feuern
- 16. Android Emulator öffnet nur einmal die Benachrichtigungsleiste
- 17. android Ausführen von Code nur einmal
- 18. Lassen Sie den Firefox-Erweiterungscode nur einmal pro Sitzung laufen.
- 19. Dieser Kreis zeichnet nur einmal in Android
- 20. Android SDK-Manager, nur installierte Paket anzeigen
- 21. Facebook Integration Login funktioniert nur einmal android
- 22. zeigen wiederholte Spaltenwert nur einmal
- 23. Holen Sie sich Facebook-Profilbild mit 3.0 SDK
- 24. Holen Sie sich das Profilbild mit dem Facebook C# SDK
- 25. Holen Sie den Cursor mit Realm-Bibliothek
- 26. So holen Sie nur den Inhalt der Datenbank mit PHP-Skript
- 27. Timer nur einmal verwenden
- 28. mLayout.addView() funktioniert nur einmal
- 29. Segue funktioniert nur einmal?
- 30. Einfügen Einträge nur einmal
Verwenden Sie einen 'BroadcastReceiver' und dann, sobald Sie den Wert einmal nur unregiester den Empfänger. – TronicZomB