2017-09-07 16 views
0

기기의 충전 포트가 정상적으로 작동하는지 확인하려고합니다. 두 가지 시나리오가 있습니다. a. 충전 케이블이 이미 꽂혀있는 경우 b. 충전 케이블이 언젠가 연결될 때.uidevicebatterystatedidchangenotification이 때때로 작동하지 않습니다.

케이스 a의 경우 viewDidLoad()에서 batteryStateMonitoring을 확인하고 배터리의 현재 상태를 확인했습니다. - 항상 효과가 있습니다.

사례 B의 경우, I는 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 
     } 
    } 

NSNotificationUIDeviceBatteryStateDidChangeNotification 트리거되지 매번 사용하여 시도. 매번 선택기 메소드를 호출하지 않습니다. 10 번 중 케이블을 연결하면 성공적으로 2 번만 응답합니다. 기기가 충전되기 시작한 경우에도 마찬가지입니다.

어떤 사람들은 그것을 중복으로 표시했습니다. 그래서 친절한 정보를 위해 정확한 중복 질문을하지는 않습니다. 왜냐하면 여기에서 저를 위해 일하는 isnot 문제에 대해 특정한 접근법을 적용했기 때문입니다. 모두가 !! 내 질문과 유사한 질문에서 제공되는 솔루션은 나를 위해 일하고 있습니다.

+0

그냥 그것을 가능하게 한 후있는 viewDidLoad 방법 내부 관찰자를 추가 개체 장치에서 수신한다. –

+0

@LeoDabus ViewDidLoad 자체에 알림을 추가했습니다. 나는 checkForCharging 메소드를 호출했다. 장치가 뷰로드에서 이미 요금이 청구되고있는 경우 현재 상태를 확인합니다. 그렇지 않은 경우에만 알림을 표시합니다. 하지만 제 경우에는이 알림이 무작위로 트리거됩니다. 때로는 트리거하고 때로는 발생하지 않습니다 – Akaanksha

+0

질문을 수정하고 코드를 업데이트하십시오. –

답변

0

당신은

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

그리고 메인 스레드에서 알림을 수신해야합니다. – santhosh