ios - Tizen Watch 和 iOS 连接问题
问题描述
我的要求是创建一个将文本从 iOS 设备传输到 Tizen 可穿戴设备的应用程序。根据 tizen 文档,我使用 BLE 进行通信。在我们的最终架构中,Tizen 作为中心,iOS 作为外围设备,初始连接将是从 tizen 到 iOS 应用程序。
对于 Tizen:
var remoteDevice = null;
var adapter = tizen.bluetooth.getLEAdapter();
function onDeviceFound(device) {
if (remoteDevice === null) {
remoteDevice = device;
console.log('Found device ' + device.name + '. Connecting...');
device.connect(connectSuccess, connectFail);
}
adapter.stopScan();
}
function connectFail(error) {
console.log('Failed to connect to device: ' + e.message);
}
function connectSuccess() {
console.log('Connected to device');
var serviceUUIDs = remoteDevice.uuids;
**var gattService = remoteDevice.getService(serviceUUIDs[0]); //error in this one**
var property = gattService.characteristics[0];
}
adapter.startScan(onDeviceFound);
对于 iOS BLE 连接:
private func setupPeripheral() {
let transferCharacteristic = CBMutableCharacteristic(type: TransferService.characteristicUUID, properties: [.notify, .writeWithoutResponse],value: nil,permissions: [.readable, .writeable])
let transferService = CBMutableService(type: TransferService.serviceUUID, primary: true)
transferService.characteristics = [transferCharacteristic]
peripheralManager.add(transferService)
self.transferCharacteristic = transferCharacteristic
}
peripheralManager.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [TransferService.serviceUUID]])
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
switch peripheral.state {
case .poweredOn:
os_log("CBManager is powered on")
setupPeripheral()
case .poweredOff:
os_log("CBManager is not powered on")
return
case .resetting:
os_log("CBManager is resetting")
return
case .unauthorized:
os_log("Unexpected authorization")
return
case .unknown:
os_log("CBManager state is unknown")
return
case .unsupported:
os_log("Bluetooth is not supported on this device")
return
@unknown default:
os_log("A previously unknown peripheral manager state occurred")
return
}
}
func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) {
os_log("Central subscribed to characteristic")
connectedCentral = central
}
func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) {
os_log("Central unsubscribed from characteristic")
connectedCentral = nil
}
通过实现remoteDevice.getService(remoteDevice.uuids[0])代码我得到错误设备未找到异常。
如果有人遇到过类似的挑战并找到了所需的解决方案,那么请提供您的宝贵意见,因为这对我们来说是一种阻碍。
提前致谢。
解决方案
我是一名 Tizen 开发人员,从未开发过 iOS 应用程序。我假设 iOS 应用程序:
- 使用TransferService UUID创建 GATT 服务器
- 开始广告TransferService UUID
- 只宣传TransferService UUID(即它应该在 Tizen 应用程序代码中的 remoteDevice.uuids[0] 中)
- 允许 BLE 客户端连接到服务器您可以验证,该应用程序是否与nRF Connect app一起工作。
请确保您的 Tizen 设备在扫描中找到您要连接的 Apple BLE 设备。您的 Tizen 应用程序连接到它找到的第一个 BLE 设备。只要 Apple 设备是唯一可见的 BLE 设备就可以了。为了确保 Tizen 客户端连接到正确的设备,您需要过滤掉onDeviceFound
. 例如,连接到具有特定蓝牙名称的设备:
function onDeviceFound(device) {
if (device.name=== [iOS BLE device name]) {
remoteDevice = device;
console.log('Found device ' + device.name + '. Connecting...');
device.connect(connectSuccess, connectFail);
}
adapter.stopScan();
}
推荐阅读
- visual-studio-code - VSCode 扩展测试:在测试中使用 `vscode.executeDefinitionProvider`
- powershell - PS 凭证重试
- javascript - next.config 中的配置图像域与动态域?
- mapbox - 如何在 Mapbox 瓦片请求中捕获无效或过期令牌的错误
- python - MacM1:无法使用 ImageDataGenerator。需要 Scipy,但已安装
- java - 在没有行/列顺序的情况下将二维 (2D) 数组作为一个整体进行排序
- sass - Parcel build 命令在尝试编译时抛出错误
- typescript - 打字稿项目参考构建+观看
- python - cx_freeze - ImportError:无法在 PATH 上找到 Qt5Core.dll
- mongodb - 如何在 mongodb 聚合中复制文档常量时间?