如何在iOS上以1%的粒度获得实时电池电量

时间:2012-08-04 09:00:25

标签: iphone cocoa-touch

我正在使用此功能获取设备的当前电池电量:

[[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之类的值。

是否有任何解决方案可以获得更高精度的百分比?

7 个答案:

答案 0 :(得分:32)

至少有四种不同的方法可以读取电池电量,并且所有四种方式都可能返回不同的值。

以下是这些值随时间变化的图表。

使用此iOS项目记录值:https://github.com/nst/BatteryChart

请查看代码以供参考。

iPhone 5 Battery

答案 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)

您可以在这里找到完美的答案

Xcode:11.4 斯威夫特:5.2

Click Here