В моем приложении я хочу записать данные акселерометра, когда приложение входит в фоновый режим (достаточно времени, предоставленного системой).Я кодировал это следующим образом:
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
if (backgroundSupported) {
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Do the work associated with the task.
if ([application backgroundTimeRemaining] > 1.0 ) {
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
}
});
В делегате, о котором я упоминал, вроде:
- (void) accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration {
if (acceleration.x > kAccelerationThreshold ||
acceleration.y > kAccelerationThreshold ||
acceleration.z > kAccelerationThreshold) {
NSLog(@"Sensed acceleration");
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
Однако, didAccelerate не запускается, когда приложение входит в фоновый режим, скорее оно вызываетсяпосле примененияWillEnterForeground.После перезапуска приложения (из фона) didAccelerate запускается несколько раз (возможно, количество раз, когда значение акселерометра менялось в фоновом режиме).Похоже, что запрос накапливается и выполняется, когда приложение выходит на передний план.
Есть ли способ записать значение акселерометра, когда приложение находится в фоновом состоянии (внутри beginBackgroundTaskWithExpirationHandler)
Пожалуйста, помогите.