2017-03-27 84 views
1

我有兩個Android設備,我想通過wifi-direct直接互相連接。Android Wifi-direct羣組和服務

其中之一是僅顯示(設備A),因此沒有觸摸屏或鼠標等輸入設備。另一個是手機(設備B)。因此,我希望設備A成爲啓動與設備B的連接的設備,以便在設備B上顯示彈出式接受對話框。 我已經對wifi直接組進行了一些研究和測試,並且已經設法將兩個設備連接在一起。不幸的是,由於設備A僅顯示,我想給設備一定程度的智能,以便它只連接到運行兼容應用的WiFi直接組。我試圖通過無線直接本地服務來做到這一點。

該計劃是設備B廣播服務,設備A收聽該服務。一旦設備A找到服務,它將連接到設備B.然後,設備A將公佈其自己的服務,以便設備B(移動電話)知道它可以繼續應用程序通信。

到目前爲止,我已經注意到,您可以在創建wifi-direct組之前看到服務。我想請教一下如何WiFi直應該有些疑問:

  • 如果一個設備都可以看到一個服務,但沒有連接到包含廣播服務的設備一組,那麼我認爲你無法連接直接到服務/設備?它總是我)連接到組,然後ii)連接到設備。
  • 如果是這樣,因爲我可以看到一個服務而不與服務廣播公司在同一個組中,那麼我怎麼會知道廣播該服務的設備是在我設備的當前wifi直連組中,並且我正在連接到同一個設備? 我知道你可以得到一個組中當前連接的對等體的「對等列表」,但是有沒有一種很好的方法可以使「服務廣播器」==「這個特定的對等體?」的關聯成爲可能。

謝謝。

回答

0

我相信你是在正確的軌道上。

關於第一個問題:設備可以連接到廣告本地服務的任何對等設備。即使它們不在同一組中,當設備連接到另一個設備時,它們會自動形成另一個/新組,請參閱下一個問題解答,以解釋如何獲取服務對等方。

對於第二個問題:可以將發現的服務與特定的對等關聯,甚至不需要調用get peers列表。您可以按照這種方式:

啓動服務發現之前實現本地服務聽衆:

WifiP2pManager.DnsSdServiceResponseListener dnsListener = new WifiP2pManager.DnsSdServiceResponseListener() { 
      @Override 
      public void onDnsSdServiceAvailable(String instanceName, String registrationType, WifiP2pDevice device) { 
      // instanceName is service name and device is the print information 
}}; 


WifiP2pManager.DnsSdTxtRecordListener txtListener = new WifiP2pManager.DnsSdTxtRecordListener() { 
      @Override 
      public void onDnsSdTxtRecordAvailable(String fullDomain, Map record, WifiP2pDevice device) { 
      // here we get the service published information in the record map object 
}}; 

注意,他們每個人的返回一個WifiP2pDevice device對象,你可以使用這個對象使用管理器來連接到設備連接方法並緩存將它們映射到其設備的服務列表。

希望這會有所幫助,goodluck。

+0

謝謝你的描述性答案。我想問一下關於這點的更多說明, 「設備可以連接到任何通告本地服務的對等設備。即使它們不在同一組中,當設備連接到另一個設備時,它們也會自動形成另一個/新的組「 」我是否需要確保連接到組的設備連接到當前的組長?或者它可以只是連接到同行,它會自行排除? – yhBoey

+0

好點,是的,你必須確保連接到羣組所有者,否則你將建立一個新羣組。通常,在建立羣組後,所有設備都會關閉服務廣告或者更好的解決方案是,所有設備關閉服務廣告,並且服務器啓動一個不同名稱的新服務,可用於瞭解已建立的服務和該設備是所有者。 – JAD