我一直在尝试新的Android Nearby Connections v2.0 API,并对用于广告和发现的连接策略有一些疑问。这些问题涉及奇怪的边缘情况,可能不容易回答。但是当我在另一篇文章的评论中提到这些潜在的问题时,Nearby Connections开发人员要求我创建一个关于这些问题的单独问题。这个问题涉及一些我曾想过的奇怪(但有点不自然)的边缘情况(但正常的开发人员做普通的事情不太可能遇到)。
The documentation包含这个有点含糊不清的声明:“Nearby Connections支持不同的广告和发现策略。”最初,我将此解释为我们可以选择两种可用连接策略中的一种,并将其用于广告和发现。由于连接策略定义了特定节点的(本地)连接拓扑,因此我们需要对广告和发现使用相同的连接策略。
然而,人们也可以将含糊不清的陈述解释为意味着人们可以(字面上)使用不同的广告和发现策略。这似乎很荒谬,但似乎没有任何机制可以实际强制策略相同。由于startAdvertising()和startDiscovery()都采用“策略”参数,因此很有可能将不同的策略传递给每个参数。
注意:我已经通过实验找到了上述问题的答案。如果广告客户和发现者使用不匹配的策略,则永远不会发现发现者的onEndpointFound
回调(因此我猜测较低级别的代码必须意识到存在不匹配并且从不发送它)。
另一个问题:异构网络(具有多种策略)是否可能?由于连接策略影响两个连接节点之间使用的通信方式(P2P_CLUSTER
使用低带宽进行小数据传输,而P2P_STAR
同时使用蓝牙和Wifi热点进行更高带宽),似乎按顺序要连接两个节点,两者都需要使用相同的策略。
如前所述,实验表明两个节点都需要使用相同的策略才能连接。但是,我可以想象另一个边缘情况,其中设备A使用“群集”策略连接到设备B,切换策略(同时保持连接打开),并使用“星形”策略连接到设备C.这会有用吗?我不知道。由于我的当前测试程序在配置更改后重新启动,我需要编写新代码以测试这种边缘情况(我还有很多其他代码,我宁愿写)。但是,Nearby Connections开发人员有兴趣了解潜在的边缘情况,所以我在这里提到这一点。
当我尝试调试其他连接问题时,出现了这些问题。为了使我的实验程序更加通用,我为连接策略添加了一个Settings选项,另一个Settings选项控制程序是应该只是做广告,还是只是发现,或两者兼而有之。然后我必须决定当这些设置发生变化时会发生什么。
是否只需停止广告/发现,然后使用所请求的策略重新启动指定的内容即可?但是,对于之前策略中剩余的任何现有连接会发生什么?这个答案似乎并不明显。
也许这些问题只会出现在像我的测试程序这样的人为场景中(我只是因为我试图理解其他连接问题而写的)。在最终产品中,我可能只选择一种策略并始终如一地使用它。如果Nearby Connections是开源的,我只看一下代码,了解在这些奇怪的边缘情况下会发生什么。但由于我无法查看源代码,因此可以查看有关预期行为的更多文档
答案 0 :(得分:2)
至于流程中间的切换策略,明确禁止。当您开始做广告/开始发现时,如果您仍然拥有先前策略的连接,则会收到错误。