Как узнать статус батареи?

Как узнать состояние батареи iPhone?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
0
12 688
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Бета-версия Iphone SDK 3.0 поддерживает это.

... и опять же, это могло быть объявлено Apple на публичном форуме.

Rog 01.04.2009 19:38

Теперь, когда выпущен SDK 3.1, найдите раздел «Получение состояния батареи устройства» в документации UIDevice. Это множество свойств батареи *.

Ответ принят как подходящий
UIDevice *myDevice = [UIDevice currentDevice];
[myDevice setBatteryMonitoringEnabled:YES];
float batLeft = [myDevice batteryLevel];
int i=[myDevice batteryState];

int batinfo=(batLeft*100);

NSLog(@"Battry Level is :%d and Battery Status is :%d",batinfo,i);

switch (i)
{
    case UIDeviceBatteryStateUnplugged:
    {
        [BCStatus setText:NSLocalizedString(@"UnpluggedKey", @"")];
        break;
    }
    case UIDeviceBatteryStateCharging:
    {
        [BCStatus setText:NSLocalizedString(@"ChargingKey", @"")];
        break;
    }
    case UIDeviceBatteryStateFull:
    {
        [BCStatus setText:NSLocalizedString(@"FullKey", @"")];
        break;
    }
    default:
    {
        [BCStatus setText:NSLocalizedString(@"UnknownKey", @"")];
        break;
    }
}

BCStatus - это пользовательская метка.

Стоит отметить, что связанные уведомления UIDeviceBatteryLevelDidChangeNotification и UIDeviceBatteryStateDidChangeNotification не отправляются, если ваше приложение выполняется в фоновом режиме.

yano 27.07.2012 03:46

какой здесь статус батареи?

Code cracker 14.08.2015 11:09

@Codecracker batteryLevel - это значение с плавающей запятой в диапазоне от 0,0 до 1,0, а batteryState - это своего рода код, который сообщает, что устройство заряжено, заряжается и т. д.

Paresh Thakor 14.08.2015 11:44

Стоит отметить, что метод setBatteryMonitoringEnabled не является потокобезопасным, как упоминалось в github.com/jszumski/uidevice-threading-crash, openradar.appspot.com/13941890, twitter.com/cheesemaker/status/517373206748205056.

yonivav 03.01.2017 13:02

Вот то, что я использовал для своей строки в качестве быстрого служебного метода, обратите внимание, что вам нужно включить мониторинг батареи, чтобы получить значение, а затем, если вы не хотите получать уведомления (очевидно, здесь можно добиться некоторой эффективности, поскольку они дают у вас есть возможность выключить его), затем вы должны снова выключить его после (как я это делаю в этой функции):

NSString *statusString(void)
{
    UIDevice *device = [UIDevice currentDevice];
    NSString *batteryStateString = nil;
    switch(device.batteryState)
    {
        case UIDeviceBatteryStateUnplugged: batteryStateString = @"Unplugged"; break;
        case UIDeviceBatteryStateCharging: batteryStateString = @"Charging"; break;
        case UIDeviceBatteryStateFull: batteryStateString = @"Full"; break;
        default: batteryStateString = @"Unknown"; break;
    }

    [device setBatteryMonitoringEnabled:YES];
    NSString *statusString = [NSString stringWithFormat:@"Battery Level - %d%%, Battery State - %@",
                              (int)round(device.batteryLevel * 100), batteryStateString];
    [device setBatteryMonitoringEnabled:NO];
    return statusString;
}

Приведенные выше ответы очень хороши, но все они в Obj-C, я использовал их с другими примерами для выполнения той же задачи на MonoTouch, поэтому я помещаю здесь свой код на случай, если он кому-то понадобится:

try
{
    UIDevice.CurrentDevice.BatteryMonitoringEnabled = true;
    _Battery.Level = (int)(UIDevice.CurrentDevice.BatteryLevel * IOSBatteryLevelScalingFactor);
    _Battery.State = UIDevice.CurrentDevice.BatteryState;
}
catch (Exception e)
{
    ExceptionHandler.HandleException(e, "BatteryState.Update");
    throw new BatteryUpdateException();
}
finally
{
    UIDevice.CurrentDevice.BatteryMonitoringEnabled = false;
}

У меня также есть полный пост в моем блоге, в котором все подробности описаны в здесь.

Другие вопросы по теме