我正在尝试编写一个macOS应用程序,该应用程序将连接已配对的蓝牙手机,并检索通讯录条目和通话记录列表。此信息应通过标准OBEX接口提供。我对macOS开发相对较新(尽管有足够的iOS开发经验),我觉得我在一个非常基础的层面上做错了。
以下是我的代码片段:
首先,我通过地址
找到特定配对的蓝牙设备let paired = IOBluetoothDevice.pairedDevices()
let device = paired?.first(where: { (device) -> Bool in
return (device as? IOBluetoothDevice)?.addressString == "some_address"
}) as? IOBluetoothDevice
这实际上工作正常,我得到了有效的对象。接下来,我正在接收地址簿服务并为其创建BluetoothOBEXSession
let service = device!.getServiceRecord(for: IOBluetoothSDPUUID(uuid32:kBluetoothSDPUUID16ServiceClassPhonebookAccess.rawValue))
let obexSession = IOBluetoothOBEXSession(sdpServiceRecord: service!)
这也很好,我正在获得适当的服务对象并创建会话。
下一步(我假设)是创建一个OBEXFileTransfer会话并执行某些操作(例如检查当前目录或检索应该具有组合传出和传入呼叫列表的telecom/cch
的内容:
let ftp = OBEXFileTransferServices(obexSession: obexSession!)
ftp!.delegate = self
if ftp!.connectToFTPService() == 0 {
NSLog("\(ftp!.currentPath())") // -- empty
ftp!.changeCurrentFolderForward(toPath: "telecom/cch")
NSLog("\(ftp!.currentPath())") // -- empty
ftp!.retrieveFolderListing()
}
我已将以下委托的方法添加到我的视图控制器(从OBEX FTS接收回调,但它们永远不会被调用:
override func fileTransferServicesRetrieveFolderListingComplete(_ inServices: OBEXFileTransferServices!, error inError: OBEXError, listing inListing: [Any]!) {
NSLog("Listing complete...")
}
override func fileTransferServicesConnectionComplete(_ inServices: OBEXFileTransferServices!, error inError: OBEXError) {
NSLog("Connection complete...")
}
override func fileTransferServicesDisconnectionComplete(_ inServices: OBEXFileTransferServices!, error inError: OBEXError) {
NSLog("Disconnect complete...")
}
override func fileTransferServicesAbortComplete(_ inServices: OBEXFileTransferServices!, error inError: OBEXError) {
NSLog("Abort complete...")
}
我在这里做错了什么?
我也找不到任何适合macOS的蓝牙示例,如果有人有好的链接,请分享。