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

And*_*w M 11 macos cocoa objective-c

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

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

  1. 电池轮询时的轮询间隔
  2. 充电时间隔

如何在Objective C中获得充电器的状态?只有在插入笔记本电脑的情况下,我才真正关心实际的百分比.显然,这对桌面来说无关紧要,所以希望有一个适用于笔记本电脑和台式机的解决方案.

Ole*_*ann 16

看看IOPowerSources API.

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

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

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

  • `IOPSCopyExternalPowerAdapterDetails()`似乎是一个更好的匹配:'如果没有连接(AC /外部电源)适配器,或者如果有错误,则返回`NULL`. (4认同)

Tho*_*yer 8

虽然这个问题确实已经有了一个可以接受我的解决方案的答案,但点击很多很多破损的链接是很痛苦的.

这是我的解决方案:

  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
    }
    
    Run Code Online (Sandbox Code Playgroud)