【问题标题】:Accessing Bluetooth LE device with non-core bluetooth framework when app is running in background应用在后台运行时使用非核心蓝牙框架访问蓝牙 LE 设备
【发布时间】:2014-07-15 07:20:59
【问题描述】:

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

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

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

由于 SDK 使用自己的蓝牙框架和许多非标准蓝牙服务,如果有的话,我是否必须允许我的应用程序在后台运行时连续访问服务? ?

我正在考虑在后台使用定位服务。我有一个疑问:

  1. 如果 Apple 发现定位服务在我的应用中几乎没有用处或没有用处,那么他们可能会拒绝它吗?

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

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

【问题讨论】:

  • 您确定您的 SDK 没有在“幕后”使用核心蓝牙吗? SDK 无法通过其他方式访问 BTLE 硬件并仍然允许您的应用被批准进入应用商店

标签: ios bluetooth bluetooth-lowenergy core-bluetooth


【解决方案1】:

如果您的应用程序仅用于 Adhoc 使用,那么您可以在后台播放音频并保持应用程序处于活动状态(这也会导致拒绝)

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

如果您正在寻找一种简单的方法来切换到 Apple 的 CoreBluetooth, LGBluetooth 是一个很棒的轻量级解决方案,你可以去结帐https://github.com/l0gg3r/LGBluetooth 框架在 CoreBluetooth 上运行,理想情况下在后台运行。

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

读取操作

[LGUtils readDataFromCharactUUID:@"f045" 服务UUID:@"5ec0" 外围:外围 完成:^(NSData *data, NSError *error) { NSLog(@"Data : %s Error : %@", (char *)[data bytes], error); }];

写操作

int8_t dataToWrite = 0xFF; [LGUtils writeData:[NSData dataWithBytes:&dataToWrite 长度:sizeof(dataToWrite)] charactUUID:@"cef9" 服务UUID:@"5ec0" 外围:外围完成:^(NSError *错误){ NSLog(@"错误: %@", 错误); }];

【讨论】:

    【解决方案2】:

    在 XCode 中,转到您的项目->Capabilities->Background Modes 并将 Background Modes 标记为 On。 Mark 还使用蓝牙 LE 配件:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2021-07-19
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多