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