jmdns.jar не работает на Android 4.0 или новее

jMdns - отличная библиотека Java для предоставления zeroconf / bonjour к вашему приложению Android.

Я успешно использовал это в проекте до Android 4.0 Ice Cream Sandwich aka ICS, когда устройства Android 4.0 начали использоваться чаще, я столкнулся с тем, что приложение не работает.

Я тестировал приложение в Android 4.0 ранее, он показывает мне список Обнаружение устройств, но в Android 4.0 или более поздних версиях он ничего не показывает.

Я протестировал эту демонстрацию https://github.com/twitwi/AndroidDnssdDemo на 4.1, но она не работает .

Я написал код ниже на основе предложения, упомянутого в 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();
        }
    
        
    }  

ваше предложение заметно


person javid piprani    schedule 10.07.2013    source источник


Ответы (2)


Я могу предположить, что он пытается загрузить данные в основном потоке. Это невозможно с Ice Cream Sandwich и далее. Попробуйте посмотреть logcat, пока он работает на телефоне, он должен четко отображать предупреждение / сообщение об ошибке, если это так.

person Warpzit    schedule 11.07.2013

Вы можете позволить ему работать через основной поток аля

        if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
person McNinja    schedule 29.01.2014