web-dev-qa-db-fra.com

Comment obtenir le niveau de batterie en temps réel sur iOS avec une granularité de 1%

J'utilise cette fonction pour obtenir le niveau de batterie actuel de l'appareil:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
UIDevice *myDevice = [UIDevice currentDevice];

[myDevice setBatteryMonitoringEnabled:YES];
double batLeft = (float)[myDevice batteryLevel]; 
NSLog(@"%f",batLeft);

mais le résultat a une granularité de 5%. Exemple: lorsque la batterie du téléphone est à 88%, il enregistre uniquement une valeur de 0,85. batteryLevel ne renvoie que les valeurs par incréments de 0,05. Par exemple: 0.85, 0.9, 0.95 et ne renvoie jamais de valeurs telles que 0.82 ou 0.83. 

Existe-t-il une solution pour obtenir un pourcentage avec une précision supérieure?

15
cat

consultez ce site: Lecture programmée du niveau de la batterie

mais, utilisez soigneusement. toutes les API utilisées ici ne sont pas documentées sur l'iPhone et entraîneront probablement un rejet si vous soumettez cette application à l'App Store. Bien que l'état de charge de la batterie ne soit pas tout à fait exact, je vous recommande d'utiliser les méthodes de surveillance de la batterie UIDevice.

10
bitmapdata.com

Il existe au moins quatre façons différentes de lire le niveau de la batterie et ces quatre méthodes peuvent renvoyer des valeurs différentes.

Voici un tableau de ces valeurs à travers le temps.

Les valeurs ont été enregistrées avec ce projet iOS: https://github.com/nst/BatteryChart

S'il vous plaît vérifier le code pour référence.

iPhone 5 Battery

32
nst
UIDevice *myDevice = [UIDevice currentDevice];    
[myDevice setBatteryMonitoringEnabled:YES];

double batLeft = (float)[myDevice batteryLevel] * 100;
NSLog(@"%.f", batLeft);    

NSString * levelLabel = [NSString stringWithFormat:@"%.f%%", batLeft];    
lblLevel.text = levelLabel;
3
user1617027

Les réponses ci-dessus sont très bonnes, mais elles sont toutes dans Obj-C. J'ai utilisé ces exemples avec d'autres exemples pour effectuer la même tâche sur MonoTouch. Je mets donc mon code ici au cas où quelqu'un en aurait besoin:

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;
}

J'ai aussi un article complet sur mon blog pour donner tous les détails dans ici

0
Has AlTaiar

Swift version pour obtenir le niveau de batterie:

UIDevice.current.isBatteryMonitoringEnabled = true
let batteryLevel = UIDevice.current.batteryLevel 

batteryLevel return 0,39; 0,40 valeurs pour moi.

0
maxwell