我在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。
答案 0 :(得分: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];
希望这可以帮到你。