用于Iphone 4s的蓝牙LE应用程序的后台时间问题

时间:2012-04-13 11:50:52

标签: ios core-bluetooth bluetooth-lowenergy background-application

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

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

我希望至少1天左右。

对于这个“bluetooth-central”值,在.plist文件的“Required background modes”键中添加。

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

有人可以告诉我为什么我的应用程序只能在后台模式下工作最多1小时。它应该像背景中的普通音乐应用程序一样继续像永远一样运行。

苹果公司是否有任何具体说明背景应用程序(这是其中一个连续运行的背景应用程序属于5个类别)失败的情况,它将进入暂停模式?

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

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

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

现在我需要实现第二个实现。即基于会话的。即使应用处于“暂停”状态,也可以获取事件 根据文件。我试图找到一个特定于蓝牙LE(核心蓝牙框架)的合适会话 “EASession”出现在经典蓝牙(外部附件框架)中。但我没有找到它。

基本上我不确定我需要将哪个会话类用于BLE目的。用于音频/视频,网络和互联网,外部配件, 有单独的会话类可用。 Core Bluetooth框架没有。

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

1 个答案:

答案 0 :(得分:5)

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

enter image description here
如果您需要,可以在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];

希望这可以帮到你。