Исходное время для приложения 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];
Надеюсь, это поможет вам.