Ich versuche zu umgehen, dass die messageLostHandler nicht für viele Minuten ausgelöst wird, nachdem ein Gerät mit Audio (oder Earshot für Android) außerhalb der Reichweite ist.Google Nest subscriptionWithMessageFoundHandler wird einmal ausgelöst?
Ich hatte gehofft, dass alle paar Sekunden eine Nachricht von einem anderen Gerät empfangen würde. Es feuert einmal. Wird das erwartet? Da ich mich nicht auf den Handler messageLost verlassen kann - woher weiß ich, wenn ein Gerät wirklich außerhalb der Reichweite des Ultraschalls ist?
Ich habe einen Timer nach dem Empfang von subscriptionWithMessageFoundHandler programmiert, in der Hoffnung, dass eine andere Nachricht hereinkommt. Ich könnte den Timer einfach ungültig machen oder neu starten. Wenn der Timer ausgelöst wird, würde ich wissen, dass x Sekunden vergangen sind und dass das andere Gerät außerhalb der Reichweite sein muss. Kein solches Glück.
UPDATE: Hier ist der Code in Frage:
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))
// We only seem to get a 1x notification of a message. So this timer is folly.
print("PING") //Only 1x per discovery.
}, messageLostHandler: {[unowned self](message: GNSMessage!) -> Void in
self.messageViewController.removeMessage(String(data: message.content, encoding: NSUTF8StringEncoding))
}, paramsBlock: { (subParams: GNSSubscriptionParams!) -> Void in
subParams.strategy = strategy
})
Beachten Sie, dass die "PING" nur einmal gedruckt.
können Sie einen Teil Ihres Codes in Ihre Frage einfügen –
Ich habe es oben zur ursprünglichen Frage hinzugefügt. –