Я пытаюсь прочитать адрес хоста, используя jmdns в android. Найденному адресу хоста собираемся присвоить строковую переменную. При попытке прочитать строковое значение возвращается тестовое значение. Здесь не замена адреса хоста на строковое значение.
Мой класс сканирования сети
public class NetworkScan {
Context context;
WifiManager wifiManager;
InetAddress deviceIPAddress;
String hostname;
List<String> ipList = new ArrayList<String>();
String foundIPAddress = "test";
public NetworkScan(Context context) {
this.context = context;
new ScanNetwork().execute();
}
public String scan() {
try {
WifiManager.MulticastLock multicastLock = wifiManager.createMulticastLock(getClass().getName());
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
JmDNS jmDNS = JmDNS.create(deviceIPAddress, hostname);
jmDNS.addServiceListener("_smarthome-server._tcp.local.", new ServiceListener() {
@Override
public void serviceAdded(ServiceEvent serviceEvent) {
jmDNS.requestServiceInfo(serviceEvent.getType(), serviceEvent.getName(),1);
}
@Override
public void serviceRemoved(ServiceEvent serviceEvent) {
}
@Override
public void serviceResolved(ServiceEvent serviceEvent) {
Log.d("SmartHome", "IPAddress =" + serviceEvent.getInfo().getHostAddress() + "\n" +
"Name =" + serviceEvent.getInfo().getName() + "\n" +
"Port =" + serviceEvent.getInfo().getPort());
String ipAddress = serviceEvent.getInfo().getHostAddress();
ipList.add(ipAddress);
foundIPAddress = ipList.get(0);
}
});
} catch (IOException e) {
e.printStackTrace();
}
return foundIPAddress;
}
class ScanNetwork extends AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
try {
deviceIPAddress = InetAddress.getByName(Formatter.formatIpAddress(wifiManager.getConnectionInfo().getIpAddress()));
hostname = InetAddress.getByName(deviceIPAddress.getHostName()).toString();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
}
}
Метод сканирования, вызывающий нажатие кнопки
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
NetworkScan networkScan = new NetworkScan(context);
String ipAddress = networkScan.scan();
Toast.makeText(context,"IpAddress ="+ipAddress,Toast.LENGTH_LONG).show();
}
},2000);
}
});
Пожалуйста, кто-нибудь может подсказать мне, как получить присваивающее строковое значение.
Заранее спасибо.