iOS開發 獲取精確剩餘電量

2021-09-08 17:49:44 字數 1807 閱讀 3144

[uidevice currentdevice].batterymonitoringenabled = yes;

double devicelevel = [uidevice currentdevice].batterylevel;

獲取當前剩餘電量, 我們通常採用上述方法。

這也是蘋果官方文件提供的。

它返回的是0.00-1.00之間的浮點值。

另外, -1.00表示模擬器。

貌似這種方法不錯, 也非常easy。

可是細緻觀察它的返回值, 我們能夠發現。它是以0.05遞變的。 折算成100% 也就是以5%來遞變的。

也就是說, 這個辦法是存在缺陷的, 最起碼, 它不精確。

後來找到了乙個方法。相當精確, 誤差保持在1%以內。

我們知道, mac下有個iokit.framework庫。

它能夠計算出我們須要的電量。

假設我們要使用它的話, (ios是不提供的) 能夠先建立乙個mac下的project, 找到iokit.framework。那iokit.framework裡面的iopowersources.hiopskeys.h複製到你的ios專案中。

另外, 還須要把iokit也匯入到你的project中去。

以下詳細介紹下用法。

匯入須要的iopowersources.h, iopskeys.h 和 iokit

在實現的地方宣告標頭檔案

#import "iopskeys.h"

#import "iopowersources.h"

/**

* calculating the remaining energy

* * @return current batterylevel

*/-(double)getcurrentbatterylevel

//calculating the remaining energy

for (int i = 0 ; i < numofsources ; i++)

psvalue = (cfstringref)cfdictionarygetvalue(psource, cfstr(kiopsnamekey));

int curcapacity = 0;

int maxcapacity = 0;

double percent;

psvalue = cfdictionarygetvalue(psource, cfstr(kiopscurrentcapacitykey));

cfnumbergetvalue((cfnumberref)psvalue, kcfnumbersint32type, &curcapacity);

psvalue = cfdictionarygetvalue(psource, cfstr(kiopsmaxcapacitykey));

cfnumbergetvalue((cfnumberref)psvalue, kcfnumbersint32type, &maxcapacity);

percent = ((double)curcapacity/(double)maxcapacity * 100.0f);

return percent;

}return -1.0f;

}

nslog(@"%.2f", [self getcurrentbatterylevel]);

iOS開發 獲取精確剩餘電量

uidevice currentdevice batterymonitoringenabled yes double devicelevel uidevice currentdevice batterylevel 獲取當前剩餘電量,我們通常採用上述方法。這也是蘋果官方文件提供的。它返回的是0.00 ...

c ,使用WMI物件獲取筆記本電池剩餘電量的百分比

有時候需要監控到筆記本電池的剩餘電量,調查後發現wmi物件可以搞定。在使用wmi物件前,先要新增對system.management的引用,然後就可以呼叫wmi物件。我們使用的wmi物件是 win32 battery 物件參考 managementclass mc new managementcla...

c ,使用WMI物件獲取筆記本電池剩餘電量的百分比

有時候需要監控到筆記本電池的剩餘電量,調查後發現wmi物件可以搞定。在使用wmi物件前,先要新增對system.management的引用,然後就可以呼叫wmi物件。我們使用的wmi物件是 win32 battery 物件參考 managementclass mc new managementcla...