jmdns.jar无法在Android 4.0或更高版本上运行

时间:2013-07-10 06:37:03

标签: android service bonjour zeroconf jmdns

jMdns 是一个很棒的java库,可以为您的Android应用程序提供zeroconf / bonjour功能。

我在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();
        }


    }  

你的建议很明显

2 个答案:

答案 0 :(得分:1)

我的简单猜测是它试图在主线程上下载数据。这不可能从Ice Cream Sandwich转发。尝试在手机上运行时查看logcat,如果是这种情况,它应该清楚地显示有关它的警告/错误消息。

答案 1 :(得分:1)

你可以让它通过主线程ala

运行
        if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }