Mac - 获取电池/充电状态(插入与否)

时间:2011-04-22 00:14:01

标签: objective-c cocoa macos

我正在构建一个需要每分钟轮询服务器的Mac OSX应用程序,如果用户愿意,甚至更少。不幸的是,该服务不支持推送...

无论如何,我想为用户提供两个选项:

  1. 电池轮询的轮询间隔
  2. 充电时
  3. 间隔
  4. 如何在Objective C中获得充电器的状态?只有在插入笔记本电脑的情况下,我才真正关心实际的百分比。显然,这对于台式机来说并不重要,所以希望有一个适用于笔记本电脑和台式机的解决方案。

2 个答案:

答案 0 :(得分:14)

查看IOPowerSources API。

首先致电IOPSCopyPowerSourcesInfo(),然后致电IOPSCopyPowerSourcesList()以获取所有可用电源的列表。 IOPSGetPowerSourceDescription()将返回包含特定电源信息的字典。根据文档,密钥kIOPSPowerSourceStateKey描述了“当前的电源。kIOPSBatteryPowerValue表示电源正在吸取内部电源; kIOPSACPowerValue表示电源连接到外部电源。”

您还可以在电源随IOPSNotificationCreateRunLoopSource()更改时设置通知。

(注意:我没有测试任何这些,只是查看了文档。)

答案 1 :(得分:7)

虽然这个问题已经有了一个可以接受我的解决方案的答案,但点击大量破碎的链接却很痛苦。

这是我的解决方案:

  1. 添加IOKit.framework
  2. 导入#import <IOKit/ps/IOPowerSources.h>
  3. 代码:

    CFTimeInterval timeRemaining = IOPSGetTimeRemainingEstimate();
    
    if (timeRemaining == kIOPSTimeRemainingUnlimited) {
            // connected to outlet
    } else if (timeRemaining == kIOPSTimeRemainingUnknown){
            // time remaining unknown (recently unplugged)
    } else if ((timeRemaining / 60) < 30){
            // less than 30 minutes remaining
    }