Контролируйте разъем для наушников, когда приложение неактивно
Я хочу контролировать разъем для наушников в моем приложении, у меня есть код для этого, но это работает только тогда, когда приложение активно, и мне нужно это делать, даже если приложение неактивно. Это возможно?
В моем тесте я помещаю код для мониторинга в AppDelegate, и когда я отключаю разъем, он запускает "NSLog", который я установил для этого случая, и если я подключаю его, запускается другой NSLog, но когда пользователь нажимает кнопку "питания" "Я понимаю, что мое приложение сейчас" неактивно ", и код для мониторинга в данный момент не работает.
Есть ли возможность создать фоновую задачу для этой цели, которая работает, даже если приложение неактивно?
1 ответ
Вы можете запустить свое приложение на срок до десяти минут после того, как оно перейдет в фоновый режим с помощью фоновой задачи. Взгляните на раздел " Выполнение в фоновом режиме и многозадачность" Руководства по программированию приложения для iOS.
- (void)applicationDidEnterBackground:(UIApplication *)application
{
backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
// clean up any unfinished task business, your app is going to be killed if you don't end the background task now
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
}];
// start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Monitor the head phone jack here.
// If this happens asynchronously, you don't need to dispatch this block, your app will continue to run as normal, only modifying or accessing its UI while it's in background mode is prohibited.
// End the background task if you're done. If this is never the case, your expiration handler will be called after ten minutes.
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
});
}
Вы можете уведомить пользователя, отправивUILocalNotification
:
- (void)notifyUserWhilePerformingBackgroundTask
{
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Headphone removed!";
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}