DevSecOpsARTIGO

Fazendo seu aplicativo iOS acessar informações de bateria

Texto original em Inglês de John Muchow, disponível
http://iphonedevelopertips.com/device/display-battery-state-and-level-of-charge.html

?

Algumas vezes, checar o estado da bateria do seu iPhone pode ser uma boa ideia. O
código a seguir mostra como monitorar os estados e os níveis da bateria
(porcentagem de carga) usando métodos na classe UIDevic.

Habilite o monitoramento da bateria

Para consultar informações
sobre o status da bateria do seu iPhone, você tem que começar por habilitar o
monitoramento da bateria a partir de uma ligação na classe UIDevice. Quando a permissão estiver ativa, você pode
descobrir o nível e o estado dessa bateria (p.e. carregando, descarregando etc).

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

[[UIDevice currentDevice] batteryLevel];
[[UIDevice currentDevice] batteryState];

Notificações
de mudanças na bateria

Você pode monitorar
mudanças em curso ao registrar para receber notificações sobre o nível da
bateria e seus updates de estado:

// Request to be notified when battery charge or state changes
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStatus) name:UIDeviceBatteryLevelDidChangeNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStatus) name:UIDeviceBatteryStateDidChangeNotification object:nil];

Alterações no estado/nível da bateria resultarão em uma ligação para o
método batteryStatus, no qual você pode atualizar um visual ‘que’ ou então
lidar  com as mudanças.

 Exibição do status da bateria

 Para testar o status da bateria,
eu escrevi um simples visualizador de controle que não tem nada mais que um ‘textview’, no qual o status e o nível atuais são exibidos.

Existem duas seções relevantes de código para este aplicativo: a
primeira é dentro do método loadView, no qual eu configurei um textview, habilitei o
monitoramento da bateria e adicionei observadores para as duas notificações em
que estou interessado:

- (void)loadView 
{
[self setView:[[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]];

// Setup the textview to display battery status
textViewStatus = [[UITextView alloc] initWithFrame:CGRectMake (20, 20, 280, 64)];
[textViewStatus setFont:[UIFont boldSystemFontOfSize:18.0]];
[textViewStatus setEditable:NO];
[textViewStatus setTextAlignment:UITextAlignmentCenter];
[[self view] addSubview:textViewStatus];

// Round the corners and set border color
[textViewStatus setBackgroundColor:[UIColor whiteColor]];
[[textViewStatus layer] setBorderColor:[[UIColor blueColor] CGColor]];
[[textViewStatus layer] setBorderWidth:2.3];
[[textViewStatus layer] setCornerRadius:15];
[textViewStatus setClipsToBounds: YES];

// Enable monitoring of battery status
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

// Print current status
[self batteryStatus];

// Request to be notified when battery charge or state changes
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStatus) name:UIDeviceBatteryLevelDidChangeNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStatus) name:UIDeviceBatteryStateDidChangeNotification object:nil];

}

O segundo método que interessa para nós é o batteryStatus, que representa a outra ponta dos pedidos de notificação, ou seja, o método
chamado via OS quando o nível ou o status da bateria mudam:

- (void)batteryStatus
{
NSArray *batteryStatus = [NSArray arrayWithObjects:
@"Battery status is unknown.",
@"Battery is in use (discharging).",
@"Battery is charging.",
@"Battery is fully charged.", nil];

if ([[UIDevice currentDevice] batteryState] == UIDeviceBatteryStateUnknown)
{
[textViewStatus setText:[batteryStatus objectAtIndex:0]];
NSLog(@"%@", [batteryStatus objectAtIndex:0]);
}
else
{
NSString *msg = [NSString stringWithFormat:
@"Battery charge level: %0.2f%%n%@", [[UIDevice currentDevice] batteryLevel] * 100,
[batteryStatus objectAtIndex:[[UIDevice currentDevice] batteryState]] ];

[textViewStatus setText:msg];
NSLog(@"%@", msg);
}
}

Notas

O status da bateria retornado das APIs acima pode não estar sempre
sincronizado com o status exibido no aparelho – note que no screenshot acima o
status do aparelho é diferente daquele que está sendo exibido no textview (bug
ou recurso, não estou certo).

Além disso, a Apple recomenda que você habilite o monitoramento da
bateria somente quando seu aplicativo precisar ser notificado de mudanças, em vez
de deixar o monitoramento ligado durante todo o ciclo de vida do seu
aplicativo.

 

Matérias especiais e reportagens conduzidas internamente pela Redação iMasters. Acompanhe no Twitter @imasters e no Instagram/Threads @portalimasters

Ver perfil