如何获取 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,您也可以这样做。
或者您可以从您的应用中调用程序并捕获输出。
【讨论】:
我对@987654321@ 的回答提供了一些有关使用 IOKit 获取可能对您有所帮助的 mac 电池电量的详细信息。 @drawnonward。很好的答案!您应该将其发布为答案,以便我可以接受。我已经使用了放置在您的答案编辑中的 sn-p 并运行了它。工作得很好。现在,如果我只想打印某些属性值,例如 DesignCapacity,该怎么办。感谢您的帮助!以上是关于如何获取 Mac(Cocoa 或 C)的电池充电水平,具体以 mWh(不是百分比)为单位的主要内容,如果未能解决你的问题,请参考以下文章