Mac - Получить статус батареи / зарядки (подключен или нет) - PullRequest
9 голосов
/ 22 апреля 2011

Я создаю приложение для Mac OSX, которое должно опрашивать сервер каждую минуту или даже меньше, если пользователь пожелает.К сожалению, сервис не поддерживает push ...

В любом случае, я хотел бы предоставить пользователю два варианта:

  1. Интервал опроса на батарее Опрос
  2. интервал при зарядке

Как бы узнать состояние зарядного устройства в Objective C?Меня не волнует фактический процент, только если ноутбук подключен или нет.Очевидно, что это не имеет значения для настольных компьютеров, так что, надеюсь, есть решение, которое работает для ноутбуков и настольных компьютеров.

Ответы [ 2 ]

14 голосов
/ 22 апреля 2011

Посмотрите на IOPowerSources API.

Сначала вызовите IOPSCopyPowerSourcesInfo(), затем IOPSCopyPowerSourcesList(), чтобы получить список всех доступных источников питания.IOPSGetPowerSourceDescription() вернет словарь с информацией о конкретном источнике питания.Согласно документации, ключ kIOPSPowerSourceStateKey описывает «текущий источник питания. kIOPSBatteryPowerValue указывает, что источник питания потребляет внутреннее питание; kIOPSACPowerValue указывает, что источник питания подключен к внешнему источнику питания.»

Вы также можете настроить уведомление при смене источников питания с помощью IOPSNotificationCreateRunLoopSource().

(Примечание: я не проверял ничего из этого, только посмотрел документацию.)

7 голосов
/ 11 марта 2015

Хотя на этот вопрос уже есть принятый ответ, который привел меня к моему решению, было больно просматривать множество и много неработающих ссылок.

Вот мое решение:

  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
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...