当应用程序在后台运行时,使用非核心蓝牙框架访问蓝牙LE设备

时间:2014-05-26 13:38:41

标签: ios bluetooth bluetooth-lowenergy core-bluetooth

我的iOS应用程序通过专有SDK(即非核心蓝牙框架)与BTLE设备进行通信。配对也通过此SDK(PnP代码)进行。 SDK服务有许多非标准的蓝牙服务。特性

一旦用户切换到另一个应用程序,即主应用程序在后台运行,我就无法再访问SDK服务。但是,即使我的应用程序在后台运行,我仍然不断从设备接收数据。

根据我的研究,Apple只允许几个背景模式,在此列出https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html(搜索页面" UIBackgroundModes"),例如音频,位置,voip,fetch,远程通知,报亭内容,外部附件,蓝牙中央,蓝牙外围设备

由于SDK使用自己的蓝牙框架和许多非标准蓝牙服务,即使应用程序在后台运行,我还必须允许我的应用程序连续按时间间隔启用服务?

我在考虑在后台使用位置服务。在那里我有一个疑问:

  1. 如果Apple认为位置服务在我的应用程序中很少或没有用,那么他们可能会拒绝它吗?

  2. 如果我的iPhone在计划表面上,那么它将不会调用didUpdateLocation方法&在这种情况下,我无法与SDK通信?

  3. 请建议,在后台运行我的应用程序的最佳方法是什么,这样我就不会遇到任何问题。

2 个答案:

答案 0 :(得分:1)

在XCode中,转到您的项目 - >功能 - >背景模式,并将背景模式标记为开。 Mark还使用蓝牙LE配件:

enter image description here

答案 1 :(得分:1)

如果您的应用程序仅用于临时使用,那么您可以在后台播放音频并保持应用程序直播(这也会导致拒绝)

请注意,如果Apple使用CoreBluetooth框架,Apple会批准BTLE应用程序。 (https://developer.apple.com/library/ios/qa/qa1657/_index.html

如果您正在寻找切换到Apple CoreBluetooth的简单方法, LGBluetooth是一款非常棒的轻量级解决方案,你可以去结帐https://github.com/l0gg3r/LGBluetooth 框架适用于CoreBluetooth,理想情况下适用于后台。

以下是使用LGBluetooth的绝佳示例(注意:偶数连接由框架处理)

阅读操作

    [LGUtils readDataFromCharactUUID:@"f045"
                             serviceUUID:@"5ec0"
                              peripheral:peripheral
                              completion:^(NSData *data, NSError *error) {
                                  NSLog(@"Data : %s Error : %@", (char *)[data bytes], error);
                              }];

写入操作

        int8_t dataToWrite = 0xFF;
        [LGUtils writeData:[NSData dataWithBytes:&dataToWrite length:sizeof(dataToWrite)]
               charactUUID:@"cef9"
               serviceUUID:@"5ec0"
                peripheral:peripheral completion:^(NSError *error) {
                    NSLog(@"Error : %@", error);
                }];