Я хотел бы, чтобы мое приложение контролировало мой акселерометр в течение бесконечного времени (даже в фоновом режиме). Когда он достигает определенной суммы, я хотел бы доставить локальное уведомление. Это точно такая же функциональность, как у приложения «Цикл сна».
Но как они это сделали? Когда я использую функцию beginBackgroundTaskWithExpirationHandler, она больше не работает через 10 минут. Добавление UIBackgroundModes вообще не помогает.
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
_motionManager = [[CMMotionManager alloc] init];
_motionManager.accelerometerUpdateInterval = 1;
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[_motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"%@",accelerometerData);
if(accelerometerData.acceleration.x > 0.5){
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
localNotif.fireDate = [NSDate date];
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = @"Wake up!";
localNotif.alertAction = @"wake";
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 4;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}];