Jmdns не возвращает адрес хоста - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь прочитать адрес хоста, используя 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);
                }
            });

Пожалуйста, кто-нибудь может подсказать мне, как получить присваивающее строковое значение.

Заранее спасибо.

...