- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在断开 Swift 中的 BLE 外设时遇到了一些问题。首先,我尝试只使用 cancelPeripheralConnection:
函数。但是,如果我只是调用此函数,则永远不会调用 didDisconnectPeripheral
函数。所以我试着关注Apple's引用指南。据说,您应该在断开连接之前删除所有通知。这真的有必要吗?是否有可能一步取消所有通知?我设置了很多通知,所以我必须搜索很多服务和特性来重置它们。我想,这不可能是一个“做得很好”的解决方案。
编辑:好吧,我发现,如果我在我的 BluetoothManager
类中调用它,cancelPeripheralConnection
工作得很好,其中 CBCentralManager
和 CBPeripheralDelegate
包含在内...有没有办法断开与此功能之外的外围设备的连接?
编辑 4:
import UIKit
class ValueCollectionView: UICollectionViewController
{
var valueCollectionViewCell: ValueCollectionViewCell = ValueCollectionViewCell()
var bluetoothManager: BluetoothManager = BluetoothManager()
override func viewDidLoad()
{
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "back:")
self.navigationItem.leftBarButtonItem = newBackButton;
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
}
func back(sender: UIBarButtonItem)
{
bluetoothManager.disconnectPeripheral(selectedPeripheralIndex!)
self.navigationController?.popViewControllerAnimated(true)
}
//Some Collection View functions...
}
这是我对 disconnectPeripheral
函数的实现(集成在 BluetoothManager 类中):
func disconnectPeripheral(peripheralIndex: Int)
{
CBmanager.cancelPeripheralConnection(peripheralArray![peripheralIndex].peripheral)
}
但无论如何,如果我调用此函数,则不会调用 didDisconnectPeripheral
函数。当我将函数放在 BluetoothManager 类中时,例如在我发现最后一个特征后,一切正常。
编辑 5:
class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
{
var CBmanager: CBCentralManager = CBCentralManager()
override init()
{
super.init()
self.CBmanager = CBCentralManager(delegate: self, queue: nil)
}
func connectPeripheral(peripheralIndex: Int)
{
CBmanager.connectPeripheral(peripheralArray![peripheralIndex].peripheral, options: nil)
}
func disconnectPeripheral(peripheralIndex: Int)
{
CBmanager.cancelPeripheralConnection(peripheralArray![peripheralIndex].peripheral)
}
//The other CentralManager functions...
}
最佳答案
对于您的第一个疑问,是的,我们应该在断开与外围设备的连接之前取消注册订阅的特征,原因在 Apple Documentation 中给出。 :
Note: The
cancelPeripheralConnection:
method is nonblocking, and anyCBPeripheral
class commands that are still pending to the peripheral you’re trying to disconnect may or may not finish executing. Because other apps may still have a connection to the peripheral, canceling a local connection does not guarantee that the underlying physical link is immediately disconnected. From your app’s perspective, however, the peripheral is considered disconnected, and the central manager object calls thecentralManager:didDisconnectPeripheral:error:
method of its delegate object.
现在,回到你的另一个问题 -
Is there a way to disconnect to a peripheral outside of this function?
您需要断开它与您实例化并开始连接的实例的连接。只要您可以在同一个对象上调用取消,它就应该可以工作。
myCentralManager.cancelPeripheralConnection(peripheral)
在我的应用程序中,我不得不使用来自许多不同类的 BLE 功能,这导致我编写了一个单例 MyBLEManager
并且所有类都将进入这个单例以进行所有 BLE 相关事件。这笔交易效果很好,有助于仅限于一个类(class)的故障排除。您可以尝试一下。
关于ios - 在 SWIFT 中断开 BLE 外设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263483/
我是 Xcode 新手,我编写了一些代码来发现并连接到 BLE 模块 (Adafruit Bluefruit LE)。然而扫描时却什么也没发现。有什么帮助吗? 这是我的代码 import UIKit
我正在开发一个 Android 应用程序,该应用程序充当具有服务的蓝牙外围设备角色。 当我开始转换广告时,搜索提供此服务的设备的其他 Android 设备可以看到我的设备(并且无需 PIN 即可与之配
解释: 我正在使用核心蓝牙框架连接到 BTLE 外围设备,将外围设备标识符保存在数据库中。 同时,我将外围设备保存在一个数组中以处理与外围设备的重新连接。 但是,当用户手动退出应用程序时,我的数组变为
我对蓝牙通信还很陌生。我的第一个项目打算将数据从 iOS 设备传输到 BLEshield(小芯片)。 为了测试我的中央代码,我决定将 iPhone 设置为外围设备(一旦我拿到芯片,芯片将扮演的角色)并
我正在尝试创建一个充当低功耗蓝牙 (BLE) 外围设备的 Android 5 (lollipop) 应用程序。该应用程序在支持 BLE 外设模式的 Nexus 9 上运行。到目前为止,我已经设法为服务
我想在我的电脑上通过 USB 控制遥控模型。我不需要真正的 radio 控制,所以直接通过电缆控制 Helm 机就足够了(是的,模型和控制单元之间会有电缆)。我想我会构建一些基于微 Controlle
在升级到 iOS6 之前,一切正常,但现在当我运行时 [centralManager cancelPeripheralConnection:peripheral]; 回调被触发 -(void) cen
我需要使用 LPC1769 通过 SPI 将某些数据发送到 FPGA。但是我不太明白应该如何处理这个问题。我目前有这段代码,最终出现在硬故障处理程序中。我不被允许使用 CMSIS,所以我必须自己定义寄
我正在尝试使在不同设备上运行的两个程序通过 CoreBluetooth 进行蓝牙通信。我可以从管理器找到并连接外围设备,并且可以浏览连接的外围设备中的服务,但是当我尝试发现特征时,出现错误此操作不允许
我正在开发一个系统,该系统将 BLE 设备 (TI CC2540) 作为中央设备,将 iPhone4S 上的 iOS 应用程序作为外围设备。除了我需要的 1 个功能外,一切都很好:从中央端列入白名单(
BLE 在 7 Plus (iOS 14.4.2) 和 6 (iOS 12) 上运行良好。但是在 XR (14.4.2) 上,11 连接卡在 centralManager.connect(periph
我开发了一个 BLE 设备作为主设备,并连接到作为从设备的传感器。现在我想开发一个实时显示来 self 的设备(主设备)的数据的应用程序,因此该应用程序必须充当从设备(广告)。 Windows 8 A
我对这个问题失去了理智。 事实是,一个 android 设备正在通告一个字符串值:“78d89537-4309-4728-87f6-3ab2bbe231d8”(36 字节)。我使用的特征定义为 an
我正在运行以下代码: [peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]; 在我的例子中(iPh
有人可以建议在 BLE 通信中是否可以在建立连接之前从外围设备验证中央设备? 例子:1)周边广告不断2)Central发现Peripherial并发送连接请求3)连接建立,广告停止3) Periphe
所以我有一个简单的外设应用程序,我在我的三星 S8 手机上运行的 Android Studio 中编写代码。我可以很好地设置我所有的 BLE 广告和特性,但是当我添加我的服务时。从另一个中央设备(即具
如果我想将外围设备 (Arduino) 连接到中央设备 (Iphone),是否必须将 arduino 中的数据结构化为服务和特征?我见过一些项目,其中 iphone 连接到 arduino,但 iph
我正在 iOS 上开发一个 BLE 应用程序,在与 BLE 配件建立连接后,我将 CBPeripheral UUID 保存到 NSUSerDefaults。这样,如果稍后重新启动应用程序,并且 BLE
我想知道是否可以通过 coreBluetooth 将设备作为外围设备和 iBeacons 的范围来宣传服务,同时在后台完成这两项工作?本质上,目的是确定信标的范围,然后如果信标在.Near 或.Imm
是否可以在连接到中央设备时对广告进行外围扫描?看起来它要么正在扫描广告要么已连接您的外围设备,但我需要两者都做。外围设备应该能够报告它接收到的广告中的 RSSI 测量值。 我在 linux box (
我是一名优秀的程序员,十分优秀!