我正在寻找一种以编程方式列出我的设备找到的任何附近蓝牙设备(可发现的)的方法。我无法在Swift 3.0中找到有关执行此调用的任何信息或教程。这个Q-A post讨论了使用Swift 1.0查找这些设备并使用Xcode 6构建,而不是最新的版本8.
我尽力尝试将代码从1.0开始编写3.0语法,但在运行以下代码时,Playground中没有返回任何内容:
i
答案 0 :(得分:6)
以下代码在Xcode版本8.2.1(8C1002),Swift 3.0中完美运行。有几行不是必需的,例如deviceInquiryStarted
的整个方法。
更新:从Xcode 9.2(9B55)和Swift 4开始,这些用法仍然有用。
import Cocoa
import IOBluetooth
import PlaygroundSupport
class BlueDelegate : IOBluetoothDeviceInquiryDelegate {
func deviceInquiryStarted(_ sender: IOBluetoothDeviceInquiry) {
print("Inquiry Started...")
//optional, but can notify you when the inquiry has started.
}
func deviceInquiryDeviceFound(_ sender: IOBluetoothDeviceInquiry, device: IOBluetoothDevice) {
print("\(device.addressString!)")
}
func deviceInquiryComplete(_ sender: IOBluetoothDeviceInquiry!, error: IOReturn, aborted: Bool) {
//optional, but can notify you once the inquiry is completed.
}
}
var delegate = BlueDelegate()
var ibdi = IOBluetoothDeviceInquiry(delegate: delegate)
ibdi?.updateNewDeviceNames = true
ibdi?.start()
PlaygroundPage.current.needsIndefiniteExecution = true
import Cocoa
import IOBluetooth
import ...
class BlueDelegate : IOBluetoothDeviceInquiryDelegate {
func deviceInquiryStarted(_ sender: IOBluetoothDeviceInquiry) {
print("Inquiry Started...")
}
func deviceInquiryDeviceFound(_ sender: IOBluetoothDeviceInquiry, device: IOBluetoothDevice) {
print("\(device.addressString!)")
}
}
//other classes here:
//reference the following outside of any class:
var delegate = BlueDelegate()
var ibdi = IOBluetoothDeviceInquiry(delegate: delegate)
//refer to these specifically inside of any class:
ibdi?.updateNewDeviceNames = true
ibdi?.start() //recommended under after an action-button press.
我最初面临的问题是尝试访问信息,因为调查仍在进行中。
当我访问它时,在很多不同的场合,我的游乐场会挂起,我将被迫强制退出活动监视器中的Xcode.app和com.apple.CoreSimulator.CoreSimulatorService
。我让自己相信这只是一个Playground错误,只是为了得知我的应用程序在调查完成后会崩溃。
正如Apple的API Reference所述:
重要说明:请勿在委托方法或使用此对象时在设备上执行远程名称请求。如果您希望在设备上执行自己的远程名称请求,请在停止此对象后执行这些请求。如果你不注意这个警告,你可能会使你的过程陷入僵局。
这完全解释了我的问题。而不是直接询问IOBluetoothDevice
方法中的sender.foundDevices()
信息(我认为可能没有更新...?),我只是使用函数中内置的参数来提及它确实是{ {1}}对象,只是要求打印该信息。
我希望在Swift中使用IOBluetoothDevice
时,我创建的此Q / A可以帮助其他有需要的人。缺乏任何教程和大量过时的Objective-C代码使得查找此信息非常具有挑战性。我要感谢@RobNapier在开始时试图找到这个谜语的答案的支持。我还要感谢NotMyName在Apple Developer论坛上post上的回复。
我将在iOS设备中更早地探索这种用法!