Как получить идеальный % заряда батареи iPhone с iOS 7

Я новичок в stackoverflow. Я искал на многих сайтах решение этого вопроса, но не нашел ничего полного. Мой вопрос в том, как я могу получить процентное значение батареи на iPhone с точностью до 1%. Я знаю, что это возможно с взломанным устройством, но как? Мой код ниже, но он возвращает значение 0.

float percent =[[objc_getClass("SBUIController")sharedInstance] displayBatteryCapacityAsPercentage];

batteryLabel.text = [NSString stringWithFormat: @"Battery is at %0.0f", percent];

person perascotta    schedule 20.05.2014    source источник
comment
Вы также можете загрузить образец кода mobiledevelopertips.com/device/   -  person Gopal Raju    schedule 20.05.2014
comment
Просто чтобы вы знали ... процент заряда батареи, отображаемый на панели задач, все еще не является идеальным процентом заряда батареи. iOS лжет вам об истинном проценте заряда батареи, как и почти все, что использует литий-ионные батареи. Устройство обычно не позволяет заряжать его до 100% или разряжать до 0%, потому что это плохо сказывается на долговечности аккумулятора. Если вы имели в виду, что хотите увидеть, что показывает строка состояния, то ответ creker - тот.   -  person Nate    schedule 22.05.2014


Ответы (2)


От 1_

CFPropertyListRef MGCopyAnswer(CFStringRef property)

MGCopyAnswer(CFSTR("BatteryCurrentCapacity"))

Работает даже в приложении AppStore на моем взломанном телефоне.

ОБНОВЛЕНИЕ

batteryLabel.text = [NSString stringWithFormat: @"Battery is at %@", MGCopyAnswer(CFSTR("BatteryCurrentCapacity"))];
person creker    schedule 20.05.2014
comment
И как я могу использовать именно это? - person perascotta; 20.05.2014
comment
Я привел вам пример. Вы хоть пытались его использовать? Первая строка — это объявление функции, потому что это частный API. Вторая строка — это то, как вам нужно ее вызвать, чтобы получить текущий уровень заряда батареи. Я добавил еще один пример, чтобы он соответствовал коду в вопросе. - person creker; 20.05.2014
comment
Да, чувак, спасибо, но мое приложение (составленное theos) все еще не запускается. Может быть, мне включить какой-нибудь файл заголовков? - person perascotta; 20.05.2014
comment
Вам просто нужно вставить объявление функции из ответа и связать libMobileGestalt.dylib. Вот и все. Если вы используете эту функцию в коде obj-c++, вам нужно объявить ее так: extern "C" CFPropertyListRef MGCopyAnswer(CFStringRef property). Какую ошибку вы получаете? - person creker; 20.05.2014
comment
Итак, я объявил функцию, как вы мне сказали. Но как я могу связать libMobileGestalt.dylib? Извините за вопрос, но я впервые использую эту библиотеку. Однако теос выдает мне эту ошибку Undefined symbols for architecture armv7: "_MGCopyAnswer", referenced from: -[RootViewController rightButtonPressed] in RootViewController.mm.1df85f31.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation) - person perascotta; 20.05.2014
comment
Вы можете связать его, как и любой другой фреймворк, на этапе сборки проекта Связать двоичный файл с библиотеками. Xcode знает о libMobileGestalt.dylib, и он будет в списке. После того, как вы свяжете ее, ошибка исчезнет, ​​потому что она говорит вам, что вы не связали нужную библиотеку. - person creker; 20.05.2014

Посмотри на:

[UIDevice currentDevice].batteryMonitoringEnabled = YES;
return [NSString stringWithFormat: @"Battery is at %0.0f", [UIDevice currentDevice].batteryLevel * 100];
person Adam Wright    schedule 20.05.2014
comment
Да, но это обычный метод, который дает интервал значений, например, 5% (40%, 45%, 50% и т. д.). Я хотел бы иметь идеальное значение заряда, и я знаю, что это может быть правильный способ получить это, но я всегда получаю 0. - person perascotta; 20.05.2014
comment
Что лучше всего вы можете получить через общедоступный API. Более гранулированных методов нет. - person Adam Wright; 20.05.2014