23

我在 Iphone-4s 中为我的应用程序使用核心蓝牙框架。
这通常必须是一个可以运行尽可能长时间的后台应用程序。

现在它只运行 40 分钟 - 最多 1 小时。

我希望至少有 1 天左右。

对于此“蓝牙中心”值,在 .plist 文件的“所需背景模式”键中添加。

最后,我的应用程序似乎将进入“暂停”模式。因为当我再次打开应用程序(后台到前台状态)时,它再次发送通知,这意味着蓝牙连接仍然连接并且 BLE 设备仍在发送通知。如果我按下主页按钮并且应用程序进入后台,它不会再次收到通知。

谁能告诉我为什么我的应用程序最多只能在后台模式下运行 1 小时。它应该像普通的音乐应用程序一样在后台继续运行,就像永远一样。

Apple 是否具体说明了后台应用程序(属于 5 类中连续运行的后台应用程序之一)在哪种情况下会进入挂起模式?

参考“ iPhoneAppProgrammingGuide”,在“ Communicating with a Bluetooth Accessory”部分,我知道,对于蓝牙 LE 应用程序 2 实现的长时间运行后台任务是必要的:

Info.plist1) UIBackgroundModes 键在文件中应该是“bluetooth-central” 。2)任何支持蓝牙数据后台处理的应用程序都必须是基于会话的。

因此,对于我的应用程序,FIRST 实现已被合并,并且该应用程序能够在后台运行并在最长 1 小时的时间内完成所有任务。

现在我需要实施第二次实施。即基于会话。根据文档,即使应用程序处于“暂停”状态,这也将允许获取事件。我试图找到创建特定于蓝牙 LE(核心蓝牙框架)的合适会话,例如EASession经典蓝牙(外部附件框架)的“”。但我没有找到。

基本上我不确定我需要为 BLE 使用哪个会话类。对于音频/视频、网络和互联网、外部配件,有单独的会话课程可供选择。核心蓝牙框架没有。

任何人都可以帮助我,哪个会话类适合 BLE。

4

1 回答 1

5

我认为问题很简单,尝试info.plist像我的屏幕一样实现你:

在此处输入图像描述
如果您愿意,您可以在AppDelegate.m下方添加功能didFinishLaunchingWithOptions以启用蓝牙、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];

希望这可以帮到你。

于 2013-07-03T13:57:40.617 回答