如何获取 Mac(Cocoa 或 C)的电池充电水平,具体以 mWh(不是百分比)为单位

Posted

技术标签:

【中文标题】如何获取 Mac(Cocoa 或 C)的电池充电水平,具体以 mWh(不是百分比)为单位【英文标题】:How to get the Battery Charge Level specifically in mWh (not percentage) for Mac (Cocoa or C) 【发布时间】:2010-07-20 13:26:46 【问题描述】:

标题几乎说明了一切。我正在创建一个 Mac 应用程序,我需要电池电量特别是 mWh(不是百分比)。最好用 C 或 Objective C 来做。

谢谢!

【问题讨论】:

【参考方案1】:

抱歉,我认为硬件没有办法报告这一点。随着电池在其生命周期中的启动,它会随着时间的推移而发生变化,而您可能一开始只知道安装时电池的标称容量。

【讨论】:

CoconutBattery (coconut-flavour.com/coconutbattery) 以 mAh 为单位获取当前容量和充电水平。也许联系开发者是个好主意。【参考方案2】:

所以这里有一段代码可以直接回答我的问题,即获取 电池电量(单位为 mWh)。它并不完美,但它可以完成工作。

 + (NSString* ) chargeInMWH 
   



CFMutableDictionaryRef matching , properties = NULL;
io_registry_entry_t entry = 0;
matching = ioserviceMatching( "IOPMPowerSource" );
entry = IOServiceGetMatchingService( kIOMasterPortDefault , matching );
IORegistryEntryCreateCFProperties( entry , &properties , NULL , 0 );



NSNumber * voltage = [[NSNumber alloc] initWithFloat:1.0];
NSNumber * currentCapacity= [[NSNumber alloc] initWithFloat:1.0];

voltage =  [properties objectForKey:@"Voltage"];    
currentCapacity =  [properties objectForKey:@"CurrentCapacity"];


int floatValue = [voltage intValue];
int floatValue2 = [currentCapacity intValue];
int answer = floatValue * floatValue2;

NSString *theCompleteAnswer = [[NSString alloc] initWithFormat:@"%i",answer];


CFRelease( properties );
IOObjectRelease( entry );


return theCompleteAnswer;

    

【讨论】:

【参考方案3】:

这可能对您没有帮助,但我知道ioreg 命令行程序可以输出有关计算机电池的各种精彩统计数据,包括设计容量、当前容量和当前充电水平(以 mAh 为单位)。 (ioreg -l 为您提供了所有这些内容的详细输出)如果您能弄清楚 那个 程序使用什么 API,您也可以这样做。

或者您可以从您的应用中调用程序并捕获输出。

【讨论】:

我对@9​​87654321@ 的回答提供了一些有关使用 IOKit 获取可能对您有所帮助的 mac 电池电量的详细信息。 @drawnonward。很好的答案!您应该将其发布为答案,以便我可以接受。我已经使用了放置在您的答案编辑中的 sn-p 并运行了它。工作得很好。现在,如果我只想打印某些属性值,例如 DesignCapacity,该怎么办。感谢您的帮助!

以上是关于如何获取 Mac(Cocoa 或 C)的电池充电水平,具体以 mWh(不是百分比)为单位的主要内容,如果未能解决你的问题,请参考以下文章

如何使用洗地机蓄电池才能保证它的安全

如何从连接的 iOS 设备获取电池充电周期?

获取电池充电时间

如何以编程方式检查手机当前是不是正在充电或正在使用电池?

在 Windows CE 6 中,我如何知道电池是不是仍在充电或已充满?

[Mac OS X Cocoa编程]如何获取其他应用程序的窗体标题以及相关信息?