Я хотел сделать пробуждение по приложению локальной сети, поэтому приложение в Android капало и искало сети, доступные для выбора пользователем, но целевая сеть, которая была бы моим компьютером (192.168.0.10
), возвращается ложный
Есть идеи, почему это происходит? зная, что хост-сервер (192.168.0.1
) и устройство (192.168.0.12
) возвращают значение true.
Изображение, показывающее проблему:
Кстати, если я запускаю приложение на своем компьютере, оно отлично работает.
public class conectarRede extends AsyncTask<String, Void, Void> {
Context contexto;
public conectarRede(Context contexto){
this.contexto = contexto;
}
protected Void doInBackground(String... dados) {
String nomeLog = "redesDisponiveis";
Log.i(nomeLog,"rodando..");
Enumeration e = null;
try {
e = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e1) {
e1.printStackTrace();
}
while(e.hasMoreElements())
{
NetworkInterface n = (NetworkInterface) e.nextElement();
byte[] macCru = new byte[0];
try {
macCru = n.getHardwareAddress();
} catch (SocketException e1) {
e1.printStackTrace();
}
if(macCru != null){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < macCru.length; i++) {
sb.append(String.format("%02X%s", macCru[i], (i < macCru.length - 1) ? "-" : ""));
}
String mac = sb.toString();
Log.i(nomeLog,"Mac do dispositivo : " + mac);
}
Enumeration ee = n.getInetAddresses();
while (ee.hasMoreElements())
{
InetAddress i = (InetAddress) ee.nextElement();
String ip = i.getHostAddress();
String sip = ip.substring(0, ip.indexOf('.',ip.indexOf('.',ip.indexOf('.')+1) + 1) + 1);
try {
for(int it=1;it<=255;it++)
{
String ipToTest = sip+it;
Log.i(nomeLog,"Vendo o ip : " + ipToTest);
//WHERE IS RETURNING FALSE TO IP 192.168.0.10
boolean online = InetAddress.getByName(ipToTest).isReachable(1000);
Log.i(nomeLog, "retornou " + online);
if (online) {
Log.i(nomeLog,ipToTest+" is online");
Log.i(nomeLog, InetAddress.getByName(ipToTest).getHostName());
}
}
} catch (IOException e1) {
Log.i(nomeLog, sip);
}
}
}
return null;
}
protected void onPostExecute(String nome) {
}
}
Я ожидал вернуть true, если IP имеет 192.168.0.10 и, если возможно, получить его MAC