2017-02-16 46 views
0

我試圖通過Wi-Fi直接宣傳Bonjour服務。這裏是代碼:未發現Android wi-fi p2p服務

manager.clearLocalServices(channel, new WifiP2pManager.ActionListener() { 
    @Override 
    public void onSuccess() { 
     Map<String, String> record = new HashMap<>(); 
     record.put("qwe", "123"); 
     WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record); 
     manager.addLocalService(channel, serviceInfo, new WifiP2pManager.ActionListener() { 
      @Override 
      public void onSuccess() { 
       manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { 
        @Override 
        public void onSuccess() {} 
        @Override 
        public void onFailure(int reason) {} 
       }); 
      } 
      @Override 
      public void onFailure(int reason) {} 
     }); 
    } 
    @Override 
    public void onFailure(int reason) {} 
}); 

在卡利的Linux我用wpi_cli發現服務

> p2p_serv_disc_req 00:00:00:00:00:00 02000001 
> p2p_find 

卡利成功發現Android的,我看到相應的信息:

P2P-DEVICE-FOUND 70:0b:c0:ac:63:11 p2p_dev_addr=70:0b:c0:ac:63:11 pri_dev_type=10-0050F204-5 name='PSP5506DUO' config_methods=0x188 dev_capab=0x25 group_capab=0x0 new=1 

但沒有後續有關服務被發現。

我該如何確保在哪一方面是問題? Android是否不宣傳服務,或者Kali沒有發現它?

更通用的問題 - 是否有工作 wi-fi p2p服務廣告和發現Android應用程序的例子?

回答

1

我懷疑這個問題並非在Android方面,因爲我已經獲得了WiFi直接服務發現,以處理2個Android設備之間的額外文本信息。如果沒記錯的話,下面是一個例子活動,你將兩個設備上運行:

https://github.com/mholzel/Dump/blob/master/NetworkServiceDiscoveryViaWifiDirect.java

所以這種方法我想借此來診斷問題是首先要確保上面的代碼工作對你設備。這將確保SOMETHING確實正在播出。在那之後,我認爲你必須懷疑卡利是個問題。

另外兩個陷阱:

  1. 服務發現通常是兩個步驟:獲得服務名稱,然後去獲得它的信息。在某些apis中,您註冊了不同的聽衆來獲取名稱,而不是那些獲取信息的聽衆。有些apis也需要你在名稱後打電話給resolve service,這樣會明確得到信息。不知道卡莉雖然...

  2. 內置的Android WiFi(不是WiFi直接)API不適用於大於6.0(或可能是7,我忘了)檢索信息的設備。特別是,在較舊的設備上,您可以獲取名稱,但由於實施過程中存在多年的缺陷,因此無法獲取信息,Google無法解決。這就是爲什麼我建議你先嚐試Android到Android。只是爲了排除在你的特定的Android設備上沒有工作的可能性。

+0

試過你的代碼,它的工作原理!將會看到,我的實現有什麼不同,因爲我的代碼不適用於Android-Android和Android-Kali對。非常感謝。 – Alexey

+0

不幸的是,工程非常不可靠 - 只是幾十個發現中的一個發現鄰居的服務。在日誌中,我看到了由Android SDK庫發送的wpa_supplicant命令序列,看起來正確。必須是糟糕的網絡層或驅動程序性能... – Alexey

+0

這種排隊與我的經驗。你必須認識到,發現可能非常緩慢。所以你需要有耐心。從字面上講,可能需要2分鐘才能發現同伴,儘管有時候它似乎會立即發生。我不記得在上面的代碼中是否有一個,但是如果它沒有被發現,你可以放入一個按鈕來重播這個服務。 –