JmDNS在Android 4.1上无法正常工作

4

JmDNS

我按照这里的方法实现了JmDNS。在我的安卓2.3.5 htc Evo上运行代码后,我能够发现我的Linux电脑。但是,在我的三星Galaxy S3上运行相同的代码(4.1.0)时什么也没有显示出来。奇怪的是,一周前它在我的4.1版本上还能正常工作,而现在却不行了。我尝试了别人的解决方案这里,但是没有成功。如果有任何人经历过这种情况并且能够解释为什么Gingerbread能与JmDNS配合工作而Jelly Bean不能,请帮我解答一下。

声明:

我的Android 4.1设备无法解析除了那些由该设备创建的服务之外的其他服务。我的2.3设备可以解析除了由4.1设备创建的服务之外的其他服务。是否是IPv6到IPv4的问题呢?

2个回答

9

已解决:

我部分地遵循了这里的建议(链接),但是我使用的是create(InetAddress addr)而不是create(String hostName)。

String ip = Formatter.formatIpAddress(wifiManager.getConnectionInfo().getIpAddress());
_bindingAddress = InetAddress.getByName(ip);
_jmdns.create(_bindingAddress);

1
看起来 JmDNS.create(); 在 Android 4.1.2 以上的所有平台版本上都不再起作用了,这个解决方案适用于 Android 4.3 和 4.4.2。 - yorkw
Formatter.formatIpAddress 在我的环境中已经被弃用,但是下面的解决方案有效。 - Dave

4

我相信以下代码在我的手机上(安卓4.1)可以运行,供其他人参考~

WifiManager wifi=(WifiManager)getSystemService(android.content.Context.WIFI_SERVICE);

WifiInfo wifiinfo = wifi.getConnectionInfo();
int intaddr = wifiinfo.getIpAddress();

byte[] byteaddr = new byte[] { (byte) (intaddr & 0xff), (byte) (intaddr >> 8 & 0xff), (byte) (intaddr >> 16 & 0xff), (byte) (intaddr >> 24 & 0xff) };
InetAddress addr=InetAddress.getByAddress(byteaddr); //Need to process UnknownHostException

jmdns=JmDNS.create(addr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接