1

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

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

[[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);
    }
}
4

2 回答 2

0

如果您只是为自己的设备执行此操作并且不打算将应用程序放在应用程序商店中,您可以研究设置voip后台模式,然后继续注册后台任务。据我所知,使用voipaudio后台模式的应用程序可以在后台执行几乎任何他们想做的事情,并且不会在 10 分钟后终止。

进一步的文档可以在这里找到:http: //developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

于 2013-06-04T14:21:51.150 回答
0

很抱歉告诉您,此类后台服务是不允许的,因此在未越狱的 iOS 设备上是不可能的。

于 2013-03-06T22:21:49.317 回答