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





Бета-версия Iphone SDK 3.0 поддерживает это.
Теперь, когда выпущен 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 не отправляются, если ваше приложение выполняется в фоновом режиме.
какой здесь статус батареи?
@Codecracker batteryLevel - это значение с плавающей запятой в диапазоне от 0,0 до 1,0, а batteryState - это своего рода код, который сообщает, что устройство заряжено, заряжается и т. д.
Стоит отметить, что метод setBatteryMonitoringEnabled не является потокобезопасным, как упоминалось в github.com/jszumski/uidevice-threading-crash, openradar.appspot.com/13941890, twitter.com/cheesemaker/status/517373206748205056.
Вот то, что я использовал для своей строки в качестве быстрого служебного метода, обратите внимание, что вам нужно включить мониторинг батареи, чтобы получить значение, а затем, если вы не хотите получать уведомления (очевидно, здесь можно добиться некоторой эффективности, поскольку они дают у вас есть возможность выключить его), затем вы должны снова выключить его после (как я это делаю в этой функции):
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;
}
У меня также есть полный пост в моем блоге, в котором все подробности описаны в здесь.
... и опять же, это могло быть объявлено Apple на публичном форуме.