2017-10-01 105 views
0

我一直在尝试新的Android Nearby Connections v2.0 API,并且有关于用于广告和发现的连接策略的一些问题。这些问题涉及奇怪的边缘案例,并且可能不容易回答。但是当我在另一篇文章的评论中提到这些潜在的问题时,一名Nearby Connections开发人员要求我就这些问题创建一个单独的问题。这个问题涉及到我想到的一些奇怪的(但有点不自然的)边缘案例(但是普通开发者在做普通事情时不会遇到这种情况)。附近的连接2.0:混合不同的策略?

The documentation包含这个含糊不清的声明:“附近的连接支持不同的广告和发现策略。”最初,我将其解释为意味着我们可以选择两种可用连接策略之一,并将其​​用于广告和发现。由于连接策略在特定节点上定义(本地)连接拓扑,因此我们需要为广告和发现使用相同的连接策略。

但是,人们也可以把这个模棱两可的陈述解释为意味着人们可以(字面上)使用不同的策略来进行广告和发现。这看起来很荒谬,但似乎没有任何机制可以迫使这些策略保持一致。由于startAdvertising()和startDiscovery()都采用“策略”参数,所以很有可能向每个策略传递不同的策略。

注意:我已经通过实验找出了上述问题的答案。如果广告客户和发现者使用的是不匹配的策略,则发现者的回调将永远不会达到(所以我猜测底层代码必须认识到存在不匹配并且永远不会发送它)。

另一个问题:异构网络(有多种策略)是否可行?由于连接策略会影响两个连接节点之间使用的通信方式(使用低带宽进行小数据传输的P2P_CLUSTER和使用蓝牙和Wifi热点以实现更高带宽的P2P_STAR),因此似乎为了连接两个节点,需要使用相同的策略。

如前所述,实验表明两个节点确实需要使用相同的策略才能进行连接。但是,我可以想象另一种边缘情况,其中设备A使用“群集”策略连接到设备B,切换策略(同时保持连接断开),并使用“星形”策略连接到设备C.这会工作吗?我不知道。由于我当前的测试程序在配置更改后重新启动,因此我需要编写新代码来测试这种边缘情况(并且我还有很多其他代码是我想写的)。但是,Nearby Connections的开发者有兴趣听到潜在的边缘案例,所以我在这里提到这一点。

当我试图调试其他连接问题时,出现了这些问题。为了使我的实验程序更加通用,我为连接策略添加了一个“设置”选项,另一个“设置”选项控制程序是否应该只是做广告,或者只是发现,或者两者兼而有之。然后我必须决定当这些设置变化时会发生什么。

只要停止广告/发现,然后重新启动指定的任何内容,使用请求的策略就足够了吗?但是,从以前的战略中剩下的现有连接会发生什么?这个答案似乎并不明显。

也许这些问题只会出现在像我的测试程序(我只写,因为我想了解其他连接问题)的人为情况。在最终产品中,我可能会选择一种策略并持续使用它。如果Nearby Connections是开源的,我只是看看这些代码,以了解在这些奇怪的边缘情况下会发生什么。但由于我无法看到源代码,所以很高兴看到有关预期行为的更多文档

回答

1

是的,你回答了你自己的问题。您必须在广告客户和发现者两方面匹配战略。否则,你永远不会发现广告设备。

至于在流程中切换策略,它是明确不允许的。当您开始广告/开始发现时,您会遇到错误,而您仍然与前一策略有关联。