Цель. Мне нужно обнаружить мой принтер этикеток Brother QL-720NW в сети Wi-Fi, чтобы печатать из моего приложения.
Я задавал различные похожие вопросы на SO, такие как Получить IP-адрес принтера , Как подключить сетевой принтер через Android? ,Как получить IP-адрес других хостов в той же сети Wi-Fi в Android? и т. д.
Но ни один из вышеперечисленных не решает мою проблему полностью.
Используя этот Как получить IP-адрес устройства из кода? Я могу получить список всех IP-адресов в моей сети Wi-Fi.
КОД:
String myIpAdd= getIPAddress(true);
ArrayList<InetAddress> inetAddresses=getConnectedDevices(myIpAdd);
public ArrayList<InetAddress> getConnectedDevices(String YourPhoneIPAddress) {
ArrayList<InetAddress> ret = new ArrayList<InetAddress>();
LoopCurrentIP = 0;
String IPAddress = "";
String[] myIPArray = YourPhoneIPAddress.split("\\.");
InetAddress currentPingAddr;
for (int i = 0; i <= 255; i++) {
try {
// build the next IP address
currentPingAddr = InetAddress.getByName(myIPArray[0] + "." +
myIPArray[1] + "." +
myIPArray[2] + "." +
Integer.toString(LoopCurrentIP));
// 50ms Timeout for the "ping"
if (currentPingAddr.isReachable(50)) {
ret.add(currentPingAddr);
}
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
LoopCurrentIP++;
}
return ret;
}
/**
* Get IP address from first non-localhost interface
* @param ipv4 true=return ipv4, false=return ipv6
* @return address or empty string
*/
public static String getIPAddress(boolean useIPv4) {
try {
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
for (InetAddress addr : addrs) {
if (!addr.isLoopbackAddress()) {
String sAddr = addr.getHostAddress().toUpperCase();
boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
if (useIPv4) {
if (isIPv4)
return sAddr;
} else {
if (!isIPv4) {
int delim = sAddr.indexOf('%'); // drop ip6 port suffix
return delim<0 ? sAddr : sAddr.substring(0, delim);
}
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
} // for now eat exceptions
return "";
}
Как определить, какой IP-адрес принадлежит моему принтеру из списка IP-адресов??
Пожалуйста помоги.