Вопрос по core-bluetooth, bluetooth-lowenergy, background-application, ios – Фоновая проблема времени для приложения Bluetooth LE для Iphone 4s

24

Я использую core-bluetooth framework для своего приложения в Iphone-4s.
Обычно это должно быть фоновое приложение, которое может работать как можно дольше.

Теперь он работает только в течение 40 минут - максимум 1 час.

Я надеюсь, по крайней мере, 1 день или около того.

Для этого «bluetooth-центральный» значение добавляется в «Обязательные фоновые режимы» введите файл .plist.

Похоже, что мое приложение будет "приостановлено" режим, в конце. так как, когда я снова открываю приложение (фон в состояние переднего плана), оно снова отправляет уведомление, это означает, что соединение Bluetooth все еще подключено, а BLE-устройство все еще отправляет уведомление. Если я нажимаю кнопку «Домой» и приложение переходит в фоновый режим, оно НЕ получает уведомление снова.

Кто-нибудь может сказать мне, почему мое приложение живет в фоновом режиме только в течение 1 часа. Он должен продолжать работать как обычное музыкальное приложение в фоновом режиме, как навсегда.

Говорит ли Apple что-то конкретное о том, при каких условиях фоновое приложение (которое является одним из тех непрерывно работающих фоновых приложений, попадающих в 5 категорий) не работает, и оно переходит в режим ожидания?

Ссылаясь & quot;iPhoneAppProgrammingGuide& quot ;, on & quot;Communicating with a Bluetooth Accessory& Quot; раздел, Я узнал, что для длительной фоновой задачи для приложений Bluetooth LE необходимы 2 реализации:

1) Ключ UIBackgroundModes должен быть «bluetooth-центральным» вInfo.plist файл. 2) Любое приложение, которое поддерживает фоновую обработку данных Bluetooth, должно основываться на сеансах.

Так что для моего приложения была внедрена ПЕРВАЯ реализация, и с этим приложением можно работать в фоновом режиме и выполнять все задачи для максимальная продолжительность 1 час.

Теперь мне нужно реализовать 2-е внедрение. т.е. на основе сеанса. Что позволит получать события, даже если приложение находится в режиме «приостановить». государство согласно документации. Я попытался найти подходящую сессию, специфичную для Bluetooth LE (базовая структура Bluetooth), например & Quot;EASession& Quot; подарок для Classic Bluetooth (Внешние аксессуары). Но я не нашел это.

В основном я не уверен, какой класс сеанса мне нужно использовать для целей BLE. Для аудио / видео, сетей и Интернета, внешний аксессуар, Есть индивидуальный сессионный класс. Там нет ничего для Core Bluetooth Framework.

Может ли кто-нибудь помочь мне с тем, какой класс сессии подходит для BLE.

Разве CBCentralManager не вызовет делегат при включении устройства с помощью CBCentralManagerStatePoweredOn? Ken Cheung
Я вижу то же самое. Мое периферийное устройство может потерять соединение с устройством ios на несколько минут, и когда оно вернется в зону действия, фоновое приложение найдет его и продолжит работу. Но если он теряет связь на несколько часов, фоновое приложение перестает пытаться подключиться снова. Jonathan
Если вам нужно взломать его, вы также можете включить воспроизведение фонового звука и непрерывно воспроизводить короткий тихий звук, когда приложение входит в фон, и останавливать его, когда оно становится активным. Will Jenkins
Вы должны иметь возможность работать в фоновом режиме столько времени, сколько хотите, вы когда-нибудь работали? Greg Price

Ваш Ответ

1   ответ
5

Я думаю, что проблема проста, попытаться реализовать васinfo.plist как мой экран:

enter image description here
И если вы хотите, вы можете добавить функцию наAppDelegate.m подdidFinishLaunchingWithOptions чтобы включить Bluetooth, AirPlay WiFi и многое другое, это только пример кода, но я думаю, что может помочь вам.

NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:nil];

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

Надеюсь, это поможет вам.

Похожие вопросы