在后台模式下获得电池电量

时间:2013-03-06 21:57:42

标签: ios ios6

我们想要构建一个应用程序,它将监视我们拥有的每个设备的电池作为后台活动,并每小时将该信息上传到服务器。通过这种方式,我们可以知道设备何时需要每隔一段时间充电一次。

我不确定在应用程序处于后台时如何获取此信息。如果它不活跃,我似乎没有得到通知。这有可能吗?这是我的代码,如果它有任何帮助。

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
// 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];

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

//    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground)
//        [self notifyServer];
// do something. this is never called when in background.
    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);
    }
}

2 个答案:

答案 0 :(得分:0)

很抱歉告诉您不允许使用此类后台服务,因此无法在非越狱的iOS设备上使用。

答案 1 :(得分:0)

如果您只是为自己的设备执行此操作而无意将应用程序放在应用商店中,则可以调查设置voip后台模式,然后继续注册后台任务。据我所知,使用voipaudio背景模式的应用程序可以在后台执行任何他们想要的操作,并且在10分钟后不会终止。

可在此处找到更多文档:http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html