Исходное время для приложения Bluetooth LE для Iphone 4s

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

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

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

Для этого "bluetooth-central" значение добавляется в "Необходимые фоновые режимы" в файле .plist.

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

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

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

Ссылаясь на "iPhoneAppProgrammingGuide", в разделе "Communicating with a Bluetooth Accessory", Я узнал, что для работы в фоновом режиме для приложений Bluetooth LE 2 требуются:

1) Клавиша UIBackgroundModes должна быть "bluetooth-central" в файле Info.plist. 2) Любое приложение, поддерживающее фоновую обработку данных Bluetooth, должно быть основано на сеансе.

Итак, для моего приложения была внедрена реализация FIRST, и с этим приложением можно работать в фоновом режиме и выполнять все задачи для максимум 1 час.

Теперь мне нужно реализовать вторую реализацию. т.е. на основе сеанса. Это позволит получать события, даже если приложение находится в состоянии "приостановить" согласно документации. Я попытался найти подходящую сессию для Bluetooth LE (базовая структура Bluetooth), например, "EASession" присутствует для классического Bluetooth (внешний аксессуар). Но я не нашел его.

В принципе, я не уверен, какой класс сеанса я должен использовать для цели BLE. Для аудио/видео, сетей и Интернета, внешних аксессуаров, есть отдельный класс сеанса. Для базовой инфраструктуры Bluetooth нет.

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

Ответ 1

Я думаю, что проблема проста: попробуйте реализовать 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];

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