【问题标题】:Retrieving battery level only works the first time I do it检索电池电量仅在我第一次执行时有效
【发布时间】:2018-01-19 13:15:48
【问题描述】:

当我的应用程序首次启动时,float batteryLevel = [UIDevice currentDevice].batteryLevel 会正确检索电池电量。但是,当我稍后尝试在代码中检索它时,即使电池电量发生变化,我也总是得到相同的值。

[UIDevice currentDevice].batteryLevel 的后续调用总是返回与第一个相同的结果,例如:如果我的应用启动时电池电量为 30%,10 分钟后我再次尝试检索它时,我得到 30%好吧,但实际上,此时电池电量为 40%。

有人知道为什么会发生这种情况吗?

【问题讨论】:

  • 标题已更改,语法已修复
  • 您是否将batteryMonitoringEnabled 设置为YES?否则您将无法看到更改。见batteryMonitoringEnabled
  • 每次打开我的应用程序时,我将batteryMonitoringEnabled设置为YES,如果NObatteryStatusunknown,并且值是-1,所以我确保我设置它。此 ivar 是否受任何其他因素影响?

标签: ios cocoa-touch uidevice


【解决方案1】:

监控不断变化的电池电量您可以使用电池状态通知UIDeviceBatteryStateDidChangeNotificationUIDeviceBatteryLevelDidChangeNotification

您可以通过以下方式注册您的 VC 以接收更改通知 -

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "batteryStateDidChange:", name: UIDeviceBatteryStateDidChangeNotification, object: nil)
 NSNotificationCenter.defaultCenter().addObserver(self, selector: "batteryLevelDidChange:", name: UIDeviceBatteryLevelDidChangeNotification, object: nil)   

然后实现选择器方法

func batteryStateDidChange(notification: NSNotification){     
    // The stage did change: plugged, unplugged, full charge...
}

func batteryLevelDidChange(notification: NSNotification){     
   // The battery's level did change (98%, 99%, ...)
}

【讨论】:

  • 我测试了它,它不能解决这个问题,我在两个应用程序之间得到了batteryLevel,一个是正确的,另一个有我描述的这个问题。我想知道有什么因素会影响它吗?我检查了methodList和ivarList,每个App都一样,我也检查地址,一样,我不知道,谢谢!
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多