Как получить время автономной работы Mac OS X MacBooks программно? - PullRequest
9 голосов
/ 16 сентября 2009

То, что я хотел сделать, это взять процент заряда батареи. Я знаю, что в Linux это аналог sysctl (hw.acpi.battery.life). Однако, когда я прошел через sysctl в Mac OS X, я не нашел эквивалентный код, чтобы найти его. Кто-нибудь может указать, как это сделать, используя цель c. Я могу вызвать sysctlbyname, но это не имеет в качестве входных данных в его структуре. Пожалуйста, помогите мне, пожалуйста

Ответы [ 3 ]

19 голосов
/ 16 сентября 2009

Попробуйте использовать IOKit и функции IOPowerSources . Вы можете использовать IOPSCopyPowerSourcesInfo () , чтобы получить BLOB-объект, и IOPSCopyPowerSourcesList () , чтобы затем извлечь из него CFArray, перечисляя источники питания. Наконец, вы можете использовать IOPSGetPowerSourceDescription () , чтобы получить словарь.

Если вы можете использовать командную строку, вы можете использовать команду pmset

Вот так:

$ pmset -g
3 голосов
/ 16 декабря 2011

вы также можете использовать ioreg в командной строке. Например:

ioreg -l -w0 |grep CurrentCapacity 

показывает текущее состояние батареи, которое можно сравнить с максимальной емкостью:

ioreg -l -w0 |grep MaxCapacity
0 голосов
/ 11 декабря 2012

Другой способ получить дополнительную информацию о состоянии батареи - использовать NSTask для выполнения команды system_profiler с SPPowerDataType в качестве аргумента. На моем Mac это дает мне следующие результаты:

Информация об аккумуляторе:

  Model Information:
      Serial Number: W01396THJD3LA
      Manufacturer: SMP
      Device Name: bq20z451
      Pack Lot Code: 0
      PCB Lot Code: 0
      Firmware Version: 201
      Hardware Revision: 000a
      Cell Revision: 165
  Charge Information:
      Charge Remaining (mAh): 5013
      Fully Charged: Yes
      Charging: No
      Full Charge Capacity (mAh): 5086
  Health Information:
      Cycle Count: 72
      Condition: Normal
  Battery Installed: Yes
  Amperage (mA): -300
  Voltage (mV): 12303

Чтобы получить то, что вы конкретно, вы можете либо проанализировать соответствующие строки, либо сгенерировать plist с помощью этой команды:

$ system_profiler SPPowerDataType -xml> BatteryInfo.plist

Это упростит получение значений на основе определенных ключей.

...