我正在使用此功能获取设备的当前电池电量:
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
double batLeft = (float)[myDevice batteryLevel];
NSLog(@"%f",batLeft);
但结果的粒度为5%。示例:当手机电池电量为88%时,它仅记录0.85的值。 batteryLevel
仅以0.05为增量返回值。例如:0.85,0.9,0.95并且永远不会返回0.82或0.83之类的值。
是否有任何解决方案可以获得更高精度的百分比?
答案 0 :(得分:32)
至少有四种不同的方法可以读取电池电量,并且所有四种方式都可能返回不同的值。
以下是这些值随时间变化的图表。
使用此iOS项目记录值:https://github.com/nst/BatteryChart
请查看代码以供参考。
答案 1 :(得分:10)
查看此网站: Reading the battery level programmatically
但是,小心使用。这里使用的所有API都没有在iPhone上记录,如果您将此应用程序提交到App Store,可能会导致拒绝。虽然电池充电状态不完全正常,但我建议使用UIDevice电池监控方法。
答案 2 :(得分:3)
UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
double batLeft = (float)[myDevice batteryLevel] * 100;
NSLog(@"%.f", batLeft);
NSString * levelLabel = [NSString stringWithFormat:@"%.f%%", batLeft];
lblLevel.text = levelLabel;
答案 3 :(得分:1)
上面的答案非常好,但是它们都在Obj-C中,我已经将这些与其他示例一起用于MonoTouch
上的相同任务,所以我将我的代码放在这里以防任何人需要它:
try
{
UIDevice.CurrentDevice.BatteryMonitoringEnabled = true;
_Battery.Level = (int)(UIDevice.CurrentDevice.BatteryLevel * IOSBatteryLevelScalingFactor);
_Battery.State = UIDevice.CurrentDevice.BatteryState;
}
catch (Exception e)
{
ExceptionHandler.HandleException(e, "BatteryState.Update");
throw new BatteryUpdateException();
}
finally
{
UIDevice.CurrentDevice.BatteryMonitoringEnabled = false;
}
我的博客上也有完整的帖子,可以在here
中提供所有详细信息答案 4 :(得分:1)
快速版本以获取电池电量:
UIDevice.current.isBatteryMonitoringEnabled = true
let batteryLevel = UIDevice.current.batteryLevel
batteryLevel
返回0.39;对我来说有0.40个值。
答案 5 :(得分:0)
如果您使用的是Swift 5.1或更高版本,则此代码绝对适合您。
步骤1:-首先,请先启用当前设备的isBatteryMonitoringEnabled属性,如下所示:-
UIDevice.current.isBatteryMonitoringEnabled = true
步骤2:-您现在可以读取当前的电池电量
let level = UIDevice.current.batteryLevel
print(level)
答案 6 :(得分:0)