Google Nearby for Swift - 如何只发现音频?

Google Nearby for Swift - How discovery Audio only?

我正在使用 Google 的 Nearby 并尝试在不使用 BLE 或 Classic BT 的情况下(仅)使用 discoveryMediums Audio。原因是因为我希望发现发生在一个房间里,而不是穿过墙壁流血。目前我有这段代码。如果我在 iPhone 运行 应用程序上关闭 BT,我会收到通知,附近功能需要它才能运行。我一定是遗漏了一些基本的东西。

func startSharingWithName(name: String) {
    if let messageMgr = self.messageMgr {
        // Show the name in the message view title and set up the Stop button.
        messageViewController.title = name

        // Publish the name to nearby devices.
        let pubMessage: GNSMessage = GNSMessage(content: name.dataUsingEncoding(NSUTF8StringEncoding,
            allowLossyConversion: true))
        publication = messageMgr.publicationWithMessage(pubMessage)            

        // Subscribe to messages from nearby devices and display them in the message view.            

        let params: GNSSubscriptionParams = GNSSubscriptionParams.init(strategy:
            GNSStrategy.init(paramsBlock: { (params: GNSStrategyParams!) -> Void in
                params.discoveryMediums = .Audio
                params.includeBLEBeacons = false
            }))

        subscription = messageMgr.subscriptionWithParams(params,
                                                         messageFoundHandler:{[unowned self] (message: GNSMessage!) -> Void in
                                                            self.messageViewController.addMessage(String(data: message.content, encoding:NSUTF8StringEncoding))
            },
messageLostHandler: {[unowned self](message: GNSMessage!) -> Void in
                                                            self.messageViewController.removeMessage(String(data: message.content, encoding: NSUTF8StringEncoding))
            })  
    }
}`

您需要将 GNSStrategy 对象传递给订阅和发布。正如您对其进行编码一样,该出版物仍在使用 BLE 和音频。

我还建议远离创建 publications/subscriptions 的非弃用方法。试试这个:

  let strategy = GNSStrategy.init(paramsBlock: { (params: GNSStrategyParams!) -> Void in
      params.discoveryMediums = .Audio
  })

  publication = messageMgr.publicationWithMessage(pubMessage, paramsBlock: { (pubParams: GNSPublicationParams!) in
    pubParams.strategy = strategy
  })

  subscription = messageMgr.subscriptionWithMessageFoundHandler({[unowned self] (message: GNSMessage!) -> Void in
    self.messageViewController.addMessage(String(data: message.content, encoding:NSUTF8StringEncoding))
  }, messageLostHandler: {[unowned self](message: GNSMessage!) -> Void in
    self.messageViewController.removeMessage(String(data: message.content, encoding: NSUTF8StringEncoding))
  }, paramsBlock: { (subParams: GNSSubscriptionParams!) -> Void in
      subParams.strategy = strategy
  })