2012-08-04 128 views
15

我使用這個函數來獲取設備的當前電池電量:如何獲取實時電池電量在iOS上有1%的粒度

[[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

所有細節,爲了記錄:我只是與iPhone 6 Plus進行檢查你的代碼,它並顯示所有標水平,如0.49等 – brainray 2015-08-09 20:17:40

回答

10

看看這個網站: Reading the battery level programmatically

但是,要小心使用。所有這裏使用的API在iPhone上都沒有記錄,如果你將這個應用程序提交給App Store,可能會導致拒絕。雖然電池充電狀態不完全,但我建議使用UIDevice電池監控方法。

+0

感謝您的鏈接。我已經檢查過它。我看到這一行:「不要忘記在發貨前從代碼中刪除頭文件和libIOKit.A.dylib!」,這是否意味着完成後,我可以刪除libIOKit.A.dylib並從代碼中移除頭文件到上傳到Apple Store? – cat 2012-08-06 01:51:55

2
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; 
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; 
+1

你的第一行是多餘的,因爲你在第三行代碼中完全一樣。 – 2017-05-24 19:56:51

32

至少有四種不同的方法來讀取電池電量,並且所有四種方式可能會返回不同的值。

下面是這些值隨時間變化的圖表。

值記錄本的iOS項目:https://github.com/nst/BatteryChart

請查看代碼以供參考。上述

iPhone 5 Battery

+0

此應用是否仍在運行並在後臺報告百分比?或者你只是讓應用程序運行? – simonthumper 2016-11-25 09:17:48

-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