【问题标题】:Tizen Watch and iOS Connectivity ProblemsTizen Watch 和 iOS 连接问题
【发布时间】:2020-03-18 21:34:54
【问题描述】:

我的要求是创建一个将文本从 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]) 代码我收到错误 device not found 异常。

此链接中也发布了相同的问题: https://developer.tizen.org/ko/forums/web-application-development/central-peripharal-client-server-architecture-ble-communication-tizen-wearable-ios-not-working?langredirect=1

如果有人遇到过类似的挑战并找到所需的解决方案,请提供您的宝贵意见,因为这对我们来说是一种阻碍。

提前致谢。

【问题讨论】:

    标签: ios tizen tizen-web-app tizen-wearable-sdk


    【解决方案1】:

    我是一名 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();
    }
    

    【讨论】:

    • 嗨,布赖恩,感谢您的反馈。我们最终遵循了类似的步骤,1)从 iOS 端 - 我创建了 transferService UUID 并为其做广告。在 Android 方面,我们也在 onDeviceFound 委托/方法中获取设备 ID。 2) 之后我尝试连接设备: var serviceUUIDs = remoteDevice.uuids; //** 这里我正在获取服务 ID。 var gattService = remoteDevice.getService(serviceUUIDs[0]);但是当我尝试获取 TransferServiceID 时 - 我收到错误“设备未找到异常”。如果您可以在同一时间分享您的输入,这将很有帮助。
    • 在我的设置中(使用 nRF Connect 应用程序和 Tizen 设备完成服务器和广告),代码运行良好 - 找到了 Android 设备并检索了它的服务。请检查remoteDevice.uuids[0] 是否包含传输服务的UUID。在致电remoteDevice.getService(<UUID> 之前,请确认remoteDevice.name 是您运行该服务的iOS 设备的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多