2017-09-07 4 views
0

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 NSNotificationUIDeviceBatteryStateDidChangeNotification 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.

+0

einfach den Beobachter in Ihrer viewDidLoad Methode hinzufügen, nachdem es ermöglicht wird. –

+0

@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

+0

Bearbeiten Sie Ihre Frage und aktualisieren Sie Ihren Code –

Antwort

0

Sie sollten auf Objekt Gerät hören

 NotificationCenter.default.addObserver(self,selector: #selector(ViewController.monitorBatteryStatus), name: NSNotification.Name.UIDeviceBatteryStateDidChange, object: UIDevice.current) 
+0

Und noch eine Sache, die Sie Benachrichtigungen auf Hauptthread hören sollten. – santhosh

Verwandte Themen