Ich versuche zu überprüfen, ob der Ladeanschluss des Geräts funktioniert. Es gibt zwei Szenarien - a. wenn das Ladekabel bereits eingesteckt ist. b. wenn das Ladekabel nach einiger Zeit eingesteckt ist.uidevicebatteriestateditchangelotification funktioniert manchmal nicht
Für den Fall a, auf viewDidLoad()
Ich überprüft für aktivieren batteryStateMonitoring
und überprüft den aktuellen Zustand der Batterie. - Es funktioniert immer.
Für den Fall b, habe ich versucht, NSNotification
s UIDeviceBatteryStateDidChangeNotification
override func viewDidLoad() {
UIDevice.current.isBatteryMonitoringEnabled = true
self.checkForCharging()
}
func checkForCharging() {
if UIDevice.current.batteryState == .full || UIDevice.current.batteryState == .charging {
self.updateUIForChargingTest()
} else {
NotificationCenter.default.addObserver(self,selector: #selector(ViewController.monitorBatteryStatus), name: NSNotification.Name.UIDeviceBatteryStateDidChange, object: nil)
}
}
func monitorBatteryStatus() {
if self.MonitorBatteryStatus(state: UIDevice.current.batteryState) == true {
self.updateUIForChargingTest()
}
else {
print("Device Battery State Unknown")
}
}
func MonitorBatteryStatus(state : UIDeviceBatteryState) -> Bool {
switch state {
case UIDeviceBatteryState.charging:
return true
case UIDeviceBatteryState.full:
return true
default:
return false
}
}
Die NSNotification
UIDeviceBatteryStateDidChangeNotification
nicht ausgelöst wird jedes Mal verwendet wird. Es ruft die Selektormethode nicht jedes Mal auf. Von 10 mal stecke ich das Kabel ein, es reagiert nur 2 mal erfolgreich. Auch wenn das Gerät mit dem Laden beginnt.
Einige Leute haben es als Duplikat markiert. Also für Sie freundliche Informationen, das ist nicht eine genaue doppelte Frage, weil hier habe ich bestimmte Ansatz auf ein Problem, das nicht funktioniert für mich funktioniert .. AT ALL !! Lösungen, die in den meiner Frage ähnlichen Fragen angeboten werden, funktionieren nicht für mich, da ich sie bereits ausprobiert habe.
einfach den Beobachter in Ihrer viewDidLoad Methode hinzufügen, nachdem es ermöglicht wird. –
@LeoDabus Ich habe eine Benachrichtigung in ViewDidLoad selbst hinzugefügt. Ich habe die Methode checkForCharging aufgerufen. Es wird nach dem aktuellen Status gesucht, wenn das Gerät bereits in der Ansicht geladen wird. Wenn nicht, löst es erst dann eine Benachrichtigung aus. Aber in meinem Fall wird diese Benachrichtigung zufällig ausgelöst. Manchmal löst es aus und manchmal nicht – Akaanksha
Bearbeiten Sie Ihre Frage und aktualisieren Sie Ihren Code –