Подтвердить что ты не робот

Как получить циклы зарядки аккумулятора с подключенного устройства iOS?

Я использую MobileDevice.framework в приложении OS X, и мне удалось узнать, как заряжена батарея устройства iOS, подключенного через USB, с помощью функции AMDeviceCopyValue(device, domain, key) с аргументами "com.apple.mobile.battery" для domain и "BatteryCurrentCapacity" для key.

Я хочу также получить количество циклов зарядки на батарее. Я считаю, что это возможно, потому что iBackupBot может извлекать эти данные. Кто-нибудь знает, как это делается? Я загрузил бесплатную копию программы и протестировал ее на iPhone 3GS, iPhone 4S и iPhone 5. Он смог захватить данные для всех трех устройств.

Я запускал iBackupBot через LLDB и записывал все его использование AMDeviceCopyValue(). При этом я решил, что он не подсчитывает количество циклов зарядки.

4b9b3361

Ответ 1

Вы можете захватить CycleCount и кучу другой информации, используя дамп ioreg (IORegistry) устройства. Например, см. здесь для дампа IORegistry для iPhone 5S. Обратите внимание на этот раздел:

 +-o AppleD2045PMUPowerSource  <class AppleD2045PMUPowerSource, busy 0, retain count 10>
    | |   |   |   |   {
    | |   |   |   |     "battery-data" = {
                            .....
                            "CycleCount" = 1
        | |   |   |   |     "ChargerConfiguration" = 960
        | |   |   |   |     "DesignCapacity" = 1550
        | |   |   |   |     "BatteryData" = {"BatterySerialNumber"="C0133237ALXFHCWBP","ChemID"=4484,"Flags"=256,"QmaxCell0"=1619,"Voltage"=4051,"CycleCount"=1,"StateOfCharge"=72,"DesignCapacity"=1550,"FullAvailableCapacity"=1573,"MaxCapacity"=1517,"MfgData"=<4330313333323337414c58464843574250000000000000010000010000000100>,"ManufactureDate"="1332"}
        | |   |   |   |     "AtCriticalLevel" = No

Частный IOKit.framework на iOS имеет API для доступа ко всей этой информации (вы можете посмотреть дамп, чтобы выяснить имена свойств и т.д., чтобы иметь возможность обращаться к нему программно). У Erica Sadun есть открытый исходный код, который использует частные функции IOKit для доступа к некоторым сведениям об оборудовании устройства (без джейлбрейка, IIRC), поэтому, возможно, это будет полезно.

Что касается захвата этой информации с Mac, не знаю. Если у вас есть приложение на устройстве, которое может вытащить информацию из IORegistry и отправить ее на Mac через USB, который будет работать. Если вы хотите сделать это без установки какого-либо дополнительного программного обеспечения на устройстве, вам придется выяснить способ удаленного получения дампа ioreg.

Надеюсь, что это тебя доставит!

Ответ 2

Я думаю, вы говорите о том, чтобы получить статус батареи устройства. После включения batteryMonitoringEnabled объекта UIDevice вы можете получить текущее состояние и уровень батареи,

Как

UIDevice *device = [UIDevice currentDevice];
device.batteryMonitoringEnabled = YES;
NSLog(@"State: %i Charge: %f", device.batteryState, device.batteryLevel);

С UIDeviceBatteryState устройства вы можете получить

  • UIDeviceBatteryStateUnplugged,
  • UIDeviceBatteryStateCharging,
  • UIDeviceBatteryStateFull,