我在Iphone-4s中的应用程序中使用了core-bluetooth框架。
这通常是一个后台应用程序,可以运行尽可能长的时间。
现在它只运行了40分钟-最多1小时。
我希望至少1天左右。
对于这个“蓝牙中心”的值被添加到.plist文件的“所需的背景模式”键中。
看起来我的应用程序最终会进入“挂起”模式。因为当我再次打开应用程序(后台到前台状态)时,它会再次发送通知,这意味着蓝牙连接仍在连接,BLE设备仍在发送通知。如果我按下主页按钮,应用程序进入后台,它不会再次收到通知。
谁能告诉我为什么我的应用程序只能在后台模式下运行最多1小时。它应该继续像正常的音乐应用程序一样在后台运行,直到永远。
苹果有没有具体说明后台应用程序在哪种情况下会进入挂起模式(这是5个类别中持续运行的后台应用程序之一)?
提到"iPhoneAppProgrammingGuide",在"Communicating with a Bluetooth Accessory“部分,我了解到,对于长时间运行的蓝牙LE应用程序2的后台任务,实现是必要的:
1)在Info.plist文件中,蓝牙密钥应该是“UIBackgroundModes -central”。2)任何支持蓝牙数据后台处理的app都必须是基于会话的。
因此,对于我的应用程序,第一个实现被合并,使用该应用程序能够在后台运行,并在最长1小时的持续时间内完成所有任务。
现在我需要实现第二个实现。即基于会话的。这将允许获取事件,即使根据文档,应用程序处于“挂起”状态。我试图找到一个适合蓝牙LE (核心蓝牙框架)的会话,就像经典蓝牙(外部附件框架)的"EASession“一样。但是我没有找到它。
基本上,我不确定需要使用哪个会话类来实现BLE目的。对于音频/视频,网络和互联网,外部附件,有单独的会话类可用。核心蓝牙框架没有。
谁能帮助我,哪一个会话类适合BLE。
发布于 2013-07-03 21:57:41
我认为问题很简单,试着像我的屏幕一样实现你的info.plist:

如果您愿意,您可以在didFinishLaunchingWithOptions下的AppDelegate.m上添加此功能,以启用蓝牙、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];希望这能对你有所帮助。
https://stackoverflow.com/questions/10140260
复制相似问题