Tag: 核心蓝牙

iOS 8核心蓝牙没有发现外设

我无法让Core Bluetooth在iOS 8上发现外围设备。相同的代码在iOS 7设备上工作正常。 起初,我认为这将是一个权限问题,因为我一直在做一些iBeacon的工作,并在iOS 8的核心位置权限有一些变化。我找不到任何网上帮助,但是。 这里是一个示例项目的链接,适用于iOS 7,但不适用于iOS 8: https://github.com/elgreco84/PeripheralScanning 如果我在iOS 7设备上运行这个项目,它会logging我周围的一些设备的广告数据。 在iOS 8上,我看到的唯一输出是中央pipe理器状态为“已打开”。

iOS CoreBluetooth:状态保存和恢复

希望在这里得到一些input。 在我目前的iOS项目中,我正在使用CoreBluetooth和Swift。 该应用程序是启用沟通使用CoreBluetooth在基本上工作的背景,种。 外围设备需要与iOS设备进行有效连接才能按预期工作。 只要连接中断,外设就会停止当前操作。 当应用程序由于内存压力而closures时也会发生这种情况。 在这种情况下,外设不应该停止工作,所以有一个问题。 为了解决这个问题,我遵循了苹果核心蓝牙编程指南来实现状态保存和恢复的背景模式,基本上说: 使用恢复标识符初始化CentralManager。 委托=自我。 实现willRestoreState委托方法。 NSLog的东西 检查launchOptions的特殊键。 NSLog的东西。 我强制iOS使用这个通用项目closures应用程序: BackgroundKill 。 当然,应用程序不再以debugging模式运行,这就是为什么我在重要点添加了一些NSLog语句来查找设备控制台。 好消息是,当应用程序终止时,连接不会被取消,iOS现在按预期保持连接,所以外设不会停止工作。 罢工! 除了应用程序订购的电池服务之外,在此期间中央和外围设备之间没有任何通信。 进行有效连接的唯一原因是为了防止外围设备停止工作。 当手动重新启动应用程序时,没有提到的NSLogs出现。 willRestoreState委托永远不会被调用,launchOptions是零。 我尝试使用队列“DISPATCH_QUEUE_CONCURRENT”而不是nil来实例化CentralManager。 没有效果。 当重新启动应用程序时,我该如何使用保存的连接? 为什么willRestoreState委托从不调用? 我在这里错过了什么? 系统为了使用状态保存和恢复而在后台/强制closures时接收数据是强制性的? 感谢您的帮助。 🙂

iPhone corebluetooth中央pipe理器发送数据到外设

我想从iPhone发送数据到蓝牙设备,发现并连接。 我指的是这个教程连接。 我无法将数据发送到与外部附件框架相连接的外部蓝牙设备。 我正在使用iPhone5,因为它具有蓝牙4.0

CoreBluetooth反复断开

我一直在寻找这个问题,但似乎没有人看到。 我有两个iPad。 一个是作为一个始终处于前台的蓝牙外设。 由于我对中央更感兴趣,所以我使得我的中央iPad能够以BLE为中心。 我的工作stream程如下: 中央应用程序运行并开始扫描 周边广告服务(或范围内) 中央设备连接到外设并停止扫描 外设停止广告(或离开范围) 中央设备断开并开始扫描 无论中央处于前景还是背景,都可以无缝地执行步骤1-5 当我运行我的中央iPad应用程序时,步骤3和5每10秒重复一次,即使该服务正在广告整个时间。 这发生在前景和背景。 断开连接,我得到这个错误: Error occurred while disconnecting peripheral: The specified device has disconnected from us. 任何想法,为什么它保持断开连接? 如果没有数据传输,CoreBluetooth是否清除连接? 目前,我的中心正在对外围特征进行一次性的阅读。 它不订阅更新,因为这些值是静态的。 谢谢!!

创buildiOS BLE HID服务?

我试图创build一个简单的“Hello World”应用程序实现HID服务(即我的应用程序作为一个简单的HIDbutton)。 但是,试图这样做时,我收到错误The specified UUID is not allowed for this operation后,我的服务添加到我的CBPeripheralManager实例。 添加任何“通用”(随机UUID)服务的作品,和其他内置的如心率监测工作正常,但我特别对HID服务很好奇。 我发现这个线程 ,表明对HID的支持已经改变了(但是这似乎是在中央侧,因为HID本身在iOS7中被支持,所以更有意义)。 文档没有提到任何服务应该不被支持。 苹果是否可以在iOS7中删除HID外设支持? 如果是这样,这是logging在某个地方?

如何在Swift中初始化一个对象时将自我传递给初始化器?

我有以下代码: import CoreBluetooth class BrowserSample: NSObject, CBCentralManagerDelegate { let central : CBCentralManager init() { central = CBCentralManager(delegate: self, queue: nil, options: nil) super.init() } func centralManagerDidUpdateState(central: CBCentralManager!) { } } 如果我把super.init()之前的central =行,那么我得到的错误: self used before super.init() call 如果我把它放在后面,我得到的错误: Property self.central not initialized at super.init call 所以,我很困惑。 我该怎么做呢?

iOS – CoreBluetooth didDiscoverPeripheral没有被调用

我已经在Xcode 6中制作了一个非常简单的iOS应用程序来试用CoreBluetooth并与我的Polar H6心率监视器进行通信。 出于某种原因,didDiscoverPeripheral方法未被调用。 我已经在StackOverflow上发现了以下类似的问题,但是你可能有点不同,或者对我没有回答: corebluetooth-diddiscoverperipheral -不存在所谓的function于迅速 未工作,号召性centralmanager-diddiscoverperipheral-advertisementdata diddiscoverperipheral-代表法-是-不叫 我在viewDidLoad中的代码: NSArray *services = @[[CBUUID UUIDWithString:HRM_HEART_RATE_SERVICE_UUID]]; CBCentralManager *centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; [centralManager scanForPeripheralsWithServices:services options:nil]; self.centralManager = centralManager; 方法centralManagerDidUpdateState被调用,它告诉我状态等于CBCentralManagerStatePoweredOn 。 didDiscoverPeripheral方法永远不会被调用,即使我把nil传递给scanForPeripheralsWithServices方法。 在app store中,我已经下载了一个名为LightBlue的应用程序。 它是一个非常简单的应用程序来testing任何使用蓝牙4.0 LowEnergy的设备。 它扫描外围设备,并显示有关设备及其服务的详细信息。 LightBlue应用程序看到我的HeartRate显示器,而我自己的小应用程序不.. 有没有人有任何提示或线索如何前进呢? (我正在使用iOS 8的Xcode 6和iPhone 6)

当蓝牙设备靠近时唤醒iOS应用程序

我在后台运行核心蓝牙扫描设备。 它工作正常,几乎停止时,我手动退出应用程序。 苹果公司的文件指出,应用程序有时可以被外设唤醒,这可能会使其从暂停状态约10秒左右,做一些操作,然后再回到暂停状态。 来源: https : //developer.apple.com/library/IOs/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html 为了这个工作,外设需要已经“连接”,以唤醒应用程序? 或者任何新的(未被发现的)外设唤醒应用程序?

如何从核心蓝牙设备读取信息

我正在研究iOS核心蓝牙应用程序,我可以使用iPad3连接BLE设备。 我能够达到块didDiscoverServices ,但无法从这里开始。 我的问题是 我如何从蓝牙设备读取特征? 我怎样才能读取蓝牙设备的其他信息? 帮助我或提供任何build议。 感谢Wilhelmsen的回复。 我从提到的块得到了以下内容: [0] – Service : <CBConcreteService: 0x1769a0> UUID: Generic Attribute Profile [1] – Service : <CBConcreteService: 0x174470> UUID: Generic Access Profile [2] – Service : <CBConcreteService: 0x1744e0> UUID: Unknown (<00005301 00000041 4c505749 53450000>) Characteristic [0] – Characteristic : <CBConcreteCharacteristic: 0x15d410> UUID: Service Changed [0] – Characteristic : […]

应用程序终止时重新连接蓝牙设备

我有一个蓝牙设备上有一个button。 当点击设备的button,通知特性更新和我的应用程序显示本地通知。 就这么简单。 我在前台连接蓝牙设备如下: var restoreOptions = [CBPeripheralManagerOptionRestoreIdentifierKey: "customIdentifier"] centralManager.connect(peripheral, options: restoreOptions) 然后设置通知特征值是否为真: peripheral.setNotifyValue(true, for: notificationCharacteristic) 当通知特征更新时,应用程序显示本地通知: func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { showLocalNotification() } 当通知特征发生变化时,触发didUpdateValueFor并显示本地通知。 前景和背景没有问题。 但是当应用程序被用户终止时,蓝牙设备被断开并且didUpdateValueFor不被触发。 即使应用终止,我想要重新连接蓝牙设备。 我怎样才能做到这一点 ? 我希望我能告诉你我的问题。 谢谢。