2017-10-01 106 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

是的,你回答了你自己的問題。您必須在廣告客戶和發現者兩方面匹配戰略。否則,你永遠不會發現廣告設備。

至於在流程中切換策略,它是明確不允許的。當您開始廣告/開始發現時,您會遇到錯誤,而您仍然與前一策略有關聯。