问题标签 [cbcentralmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
572 浏览

ios - 我们可以写入 CBPeripheral 的最大数据量

我们可以通过 iOS BTLE 向 CBPeripheral 写入的最大数据量是多少。这是130字节吗?

0 投票
1 回答
2949 浏览

ios - 平台不支持低功耗蓝牙中心/客户端角色

在设置中,我看到蓝牙已打开。但

- (void) centralManagerDidUpdateState:(CBCentralManager *)central

返回

central.state == CBCentralManagerStateUnsupported

这是什么意思?

iPad 型号 mc796rs/a 和 iOS 7.0.3

0 投票
0 回答
537 浏览

ios - 外设传输队列问题

我正在围绕 CoreBluetooth 开发一个简单的包装器,以将任何数据发送到任何设备。在开发过程中,我遇到了很多框架中的错误,它们非常烦人,为了使我的包装器稳定,我不得不缩短一些功能以提高可靠性。

现在我正在从外围设备发送数据。

好的,所以我有以下案例:

  • 客户要求动态特性的值
  • 我在服务器端收到回调 - peripheral:didReceiveReadRequest:。

注意:我需要在这个方法中响应这个 CBATTRequest - 我不能将它存储在其他地方并异步响应它。(我只是把一些 @“PrepareToReceiveValue” 块放在中央将被忽略。所有发送都在队列中完成。)

  • 为了为各种设备提供数据,我构建了一个包含 BTMessage 的队列。(所以对于 readRequest 我创建消息并将其添加到发送队列。如果块发送失败 - 我将从外围管理器获得有关 readyToUpdateSubscribers 的回调,并要求队列重新发送失败的块)
  • 因此,当我立即请求大量动态特征值并同时从外围设备向中央发送数据时,有时它只会冻结发送进度并导致断开连接。

经过几次测试,我发现这都是关于传输队列的:如果传输队列已满,您将收到读取请求 - 它只是不会响应它。

所以我有潜在的不稳定系统状态:

  1. 外围设备正在向某个中心发送数据。
  2. 在我的发送方法中,updateValue:forCharac... 返回 NO,因为传输队列已满。
  3. 此时,中心请求特性和外围设备的动态值:didReceiveReadRequest:调用将添加到当前运行循环。
  4. 从发送方法返回后,它将使 peripheral:didReceiveReadRequest: 方法出列并且响应此请求将无效(传输队列已满)。
  5. 所以在这种情况下,respondToRequest: 被忽略,就像我根本没有调用它一样。
  6. 在我响应请求之前,CoreBluetooth 将无法发送/接收任何数据。这就是冻结任何发送/接收进度并伴随断开连接的原因。
  7. 正如我之前提到的 - 我必须以适当的方法响应请求 - 否则它也将无效。(我这么说是因为如果队列已满,我试图将这些请求放入数组中,并在它有一些空间但没有运气时响应它们)。

我正在等待您的建议/建议如何解决这个问题,任何帮助将不胜感激。

0 投票
1 回答
993 浏览

ios - CoreBluetooth CBCentralManager 委托方法没有被触发

我已经使用 CoreBluetooth 框架扫描所有服务并在我第一次启动我的应用程序时让外围设备运行良好,但是如果我弹出到上一个类并再次从该类返回,我的 CBCentralManger 委托方法不会被触发

但是第二次调用下面的方法

}

但在此之后它没有被触发其余的委托方法

谁能告诉我不调用这些委托方法的可能性是什么?

0 投票
1 回答
1446 浏览

ios - iOS 蓝牙中央管理器

我正在 iPhone 上试用 iOS 蓝牙中央管理器。

它总是去硬件是不受支持的选择。

另外,我可以通过蓝牙在 Android 手机之间发送图片,但是当我尝试发送到我的 iPhone 时,它​​被拒绝了。iOS蓝牙是封闭的吗?它不能与其他蓝牙设备一起使用?

0 投票
2 回答
4053 浏览

ios - 在 CBCentralManager 初始化 centralManagerDidUpdateState 之后它没有被调用

我正在开发我的第一个蓝牙应用程序。现在,我有一个 AppUIview,它实现了一个按钮,该按钮调用 AppCentralManager 中的一个函数,其中蓝牙功能将被实现:

在 AppBluetoothCenter.h 我已经声明了这些功能:

在 AppBluetoothCenter.m 中,我实现了以下功能:

在我收到的日志控制台中运行应用程序:

AppBluetooth[1273:60b] 扫描函数
AppBluetooth[1273:60b] 初始化

为什么 centralManagerDidUpdateState 不被调用?

0 投票
1 回答
2044 浏览

ios - iOS CBCentralManager 在进入范围时不会在后台检测到 CBPeripheral

我正在开发一个测试 BTLE 应用程序。用户可以选择启动中央或外围模式。如果 2 个设备都处于活动状态并且在范围内,它们会立即检测、连接和传递数据,但是......

如果 device1 在中心模式下启动,然后进入后台,则 device2 将超出范围并进入外围模式,当外围设备靠近后台中心时,中心检测外围设备并获取数据。

如果 device1 以外围模式启动并置于后台,则 device2 会超出范围并置于中央模式,然后进入范围,它不会检测到外围设备。(我最多等了 5 分钟)如果我再次按下“启动中央”按钮,它会立即检测到!

“启动中心”仅执行以下操作:

我添加了以下可耻的 hack:

现在它可以工作了!我对此感到茫然。根据我的理解和经验,当 CBCentral 管理器开始扫描时,它会一直扫描直到停止,尤其是在前台时。

0 投票
2 回答
4744 浏览

ios - 如何从具有相同服务 UUID 的两个设备中找到特定的 BLE 4.0 外设

对于 BLE 4.0,它提供 API 来发现具有服务 UUID 数组的外围设备。

我只想找到具体的。如何做到这一点?

如果需要将标识符分配给特定设备,该怎么做?

(我认为我的问题需要一些iOS核心蓝牙的背景。)

0 投票
1 回答
2596 浏览

ios - 核心蓝牙状态恢复

我正在开发一个对外围设备断开做出反应的应用程序,我现在正在尝试采用 iOS 7 中引入的 ne 状态保存和恢复。

我按照文档中的说明做了所有事情,这意味着:

  1. 我为中心添加了背景模式。

  2. 我总是用相同的唯一标识符实例化我的中央管理器。

  3. 我实现了这个centralManager:willRestoreState:方法。

当我的应用程序移到后台时,我在 AppDelegate 回调中用kill(getpid(), SIGKILL);. (核心蓝牙状态保存和恢复不起作用,无法将应用重新启动到后台

当我现在通过移除电池断开外围设备时,我的应用程序正在按预期唤醒并launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey]包含正确的标识符但centralManager:willRestoreState:未被调用。只有当我断开另一个外围设备时,才会调用此方法。

0 投票
2 回答
754 浏览

ios - CLBeacon 和 CBcentralManager 有什么区别

我想检测我的 iphone 附近的信标/ibeacon 设备。我不确定我应该使用哪个类

我应该使用 CLBeacon 和 CLBeaconRegion 并开始监视区域

或者

我应该使用 CBcentralManager 和 scanForPeripheralsWithServices

哪个 api 最适合哪个用例?

我试图在网上找到它,但它没有在任何地方记录