Objective-c длительный фоновый сервис для Bluetooth, когда приложение в фоновом режиме
Кажется, я не могу найти нужную документацию, учебное пособие или ТАК сообщение, чтобы указать мне на правильную реализацию... даже несмотря на то, что вокруг этой темы много сообщений.
проблема
У меня есть приложение, которое подключается (пары) к устройству BT, которое я построил. То, что я хочу, - это когда пользователь нажимает кнопку "Домой" или фоновые изображения приложения, которое я хочу отправлять через сервисный уровень BT через устройство BT через регулярные промежутки времени. Я делаю это сейчас (только один раз) в applicationWillResignActive
а также applicationDidEnterBackground
методы и работает отлично. Проблема в том, что я могу выполнить это только тогда, когда это кажется. Любые циклы, таймеры, службы фонового типа, которые я запускаю в этих методах, вскоре умирают.
Что мне нужно
Для приложения, чтобы продолжать искать мое устройство BT в фоновом режиме и каждые 10 секунд или около того и отправлять обновление на устройство. Сначала я должен убедиться, что приложение по-прежнему работает в фоновом режиме, но как только я знаю, что оно в фоновом режиме, я хочу отправить обновление. Когда приложение возвращается в фокус, я могу остановить обновления на устройстве BT, но важно, чтобы оно отправляло их, когда приложение не в фокусе.
Исследование
Я нашел эти сообщения SO ( долгосрочные задачи, обработчик выполнения фоновых задач, используя это в цикле NSTimer... но он умирает), но они не помогли с реализацией вообще.
1 ответ
Когда я писал этот пост, я был слишком новичком в OBJ-C и не совсем понимал концепцию методов делегата с надлежащим уровнем доступа для фонового запуска (т. Е. Доступ к info.plist через bluetooth-central).
Конечным результатом через месяц стало создание периферийного устройства, которое могло бы запускать приложение в цикле синхронизации через подписанные обновления характеристик. После запуска приложения у вас есть 10 секунд, чтобы обработать только что произошедшее событие, и, поскольку я сохраняю только копию данных, отправленных устройством, все в порядке.