2009-05-08 6 views
23

Je ne peux pas trouver quelque chose de précis à l'aide my favourite tool, mais je pensais que je le mettrais ici ...détecter si l'appareil est en charge

Est-il possible, en utilisant le SDK iPhone, pour une application pour détecter si l'appareil est en état de réception (charge, dock, etc.)?

Je voudrais pouvoir désactiver automatiquement idleTimer si l'appareil est sous tension (sinon c'est un réglage spécifié par l'utilisateur).

+0

Belle touche sur la liaison Google, je ris. Bonne question, m'a fait gagner du temps. Merci à vous et aux contributeurs. –

Répondre

32

Oui, UIDevice est capable de vous dire ceci:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; 

if ([[UIDevice currentDevice] batteryState] == UIDeviceBatteryStateCharging) { 
    NSLog(@"Device is charging."); 
} 

Voir la référence UIDevice dans la documentation pour plus d'informations et pour d'autres valeurs de batteryState.

39

Vous feriez mieux d'utiliser:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; 

if ([[UIDevice currentDevice] batteryState] != UIDeviceBatteryStateUnplugged) { 
     [UIApplication sharedApplication].idleTimerDisabled=YES; 
    } 

Ceci est parce que vous devez vous préoccuper deux différents états - l'une est que la batterie est charge, et l'autre quand il est entièrement chargé.

Si vous vraiment voulu être complet à ce sujet - vous inscrire pour recevoir les notifications de surveillance de la batterie, de sorte que vous pouvez réactiver la minuterie de veille si l'utilisateur a déconnecté l'alimentation principale, etc.

0

Vous pouvez utiliser darwin notification center et utilisez le nom de l'événement com.apple.springboard.fullycharged.

De cette façon, vous obtiendrez une notification à votre méthode personnalisée, voici un code snip:

// Registering for a specific notification 
NSString *notificationName = @"com.apple.springboard.fullycharged"; 
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), 
           NULL, 
           yourCustomMethod, 
           (__bridge CFStringRef)notificationName, 
           NULL, 
           CFNotificationSuspensionBehaviorDeliverImmediately); 

// The custom method that will receive the notification 
static void yourCustomMethod(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) 
{ 
    NSString *nameOfNotification = (__bridge NSString*)name; 

    if([nameOfNotification isEqualToString:notificationName]) 
    { 
    // Do whatever you want... 
    } 
} 
+1

La réponse est iOS ... vous devriez essayer le code postal. Je l'ai utilisé dans quelques projets du mien. Aussi, lisez les hyperliens ci-dessus. – OhadM

4

Swift

UIDevice.currentDevice().batteryMonitoringEnabled = true; 

if (UIDevice.currentDevice().batteryState != .Unplugged) { 
    print("Device is charging."); 
} 
4

Swift 3:

UIDevice.current.isBatteryMonitoringEnabled = true 
let state = UIDevice.current.batteryState 

if state == .charging || state == .full { 
    print("Device plugged in.") 
} 
+0

peut être, il est "laisser état = UIDevice.current.batteryState" –

+1

@BateroBui et tout le monde qui a suggéré la mise à jour; Merci – UpSampler

Questions connexes