わかりました、ローカル サブネットから DNS サービスを取得する方法を探していましたが、機能していないようです。
これまでのところ、次のコードを使用して wifi に接続すると、ローカル DNS の IP を取得できます。
ArrayList<String> servers = new ArrayList<String>();
try {
Class<?> SystemProperties = Class
.forName("android.os.SystemProperties");
Method method = SystemProperties.getMethod("get",
new Class[] { String.class });
for (String name : new String[] { "net.dns1", "net.dns2",
"net.dns3", "net.dns4", }) {
String value = (String) method.invoke(null, name);
if (value != null && !"".equals(value)
&& !servers.contains(value))
servers.add(value);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (String s : servers) {
Log.v("ERRORID", s);
}
そして、以下を文字列として返します。
10.10.10.204
172.19.2.10
ここから、すべてのサービスについて各 DNS IP を照会したいのですが、方法がわかりません。
編集:jmDNSを使用してみましたが、うまくいきませんでした
InetAddress addr = InetAddress.getByName("172.19.2.10");
JmDNS jmdns = JmDNS.create(addr);
jmdns.addServiceListener("_http._tcp.local.", new SampleListener());
SampleListener() は次のとおりです。
static class SampleListener implements ServiceListener {
@Override
public void serviceAdded(ServiceEvent event) {
Log.v("ERRORID", "Service added : " + event.getName() + "."
+ event.getType());
}
@Override
public void serviceRemoved(ServiceEvent event) {
Log.v("ERRORID", "Service removed : " + event.getName() + "."
+ event.getType());
}
@Override
public void serviceResolved(ServiceEvent event) {
Log.v("ERRORID", "Service resolved: " + event.getInfo());
}
}