2013-07-10 109 views
3

jMdns是一個偉大的Java庫,可爲您的Android應用程序提供zeroconf/bonjour功能。jmdns.jar不能在Android 4.0或更高版本上工作

我成功地在一個項目中使用這個項目,直到Android 4.0 Ice Cream Sandwich aka ICS,一旦Android 4.0設備開始被更頻繁地使用,我正面臨着應用程序無法正常工作。在早期的Android 4.0

我已經測試過的應用程序,它告訴我的發現設備但在Android 4.0或以上後,它什麼都不顯示列表。

我已經在4.1上測試過這個演示「https://github.com/twitwi/AndroidDnssdDemo」,但它不工作。

我在"http://snctln.com/2012/08/03/jmdns-and-android-4-0/"

private android.net.wifi.WifiManager.MulticastLock lock; 
private android.os.Handler handler = new android.os.Handler(); 
private JmDNS jmdns = null; 
public WifiManager wifi; 


private void setUp() 
    { 

     WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE); 
     WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); 
     int ip = wifiInfo.getIpAddress(); 
     String ipAddress = Formatter.formatIpAddress(ip); 




     try { 


      jmdns.create(_bindingAddress); 
      ServiceInfo[] infos = jmdns.list("_afpovertcp._tcp.local."); 
      for (int i=0; i < infos.length; i++) { 
       Log.i("Servic : ",infos[i].getName()+""); 
//    notifyUser("\nServic : "+infos[i].getName()+""); 

      } 



     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } 

您的建議寫成下面根據建議提代碼是明顯的

回答

0

我簡單的猜測是,它試圖下載主線程上的數據。這不可能從Ice Cream Sandwich轉發。嘗試在手機上運行時查看logcat,如果出現這種情況,應該清楚地顯示關於它的警告/錯誤消息。

0

你可以讓它通過主線程中運行ALA

 if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
相關問題