developer - Android API-23: Reemplazo de InetAddressUtils
android studio 6.0 download (5)
Como interpreto de los comentarios, puedes reemplazar esa función con esta comparación:
inetAddress instanceof Inet4Address
por lo que su código terminaría en:
if(!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
Al cambiar a la API de Android Marshmallow, estaba usando org.apache.http.conn.util.InetAddressUtils
para InetAddressUtils.isIPv4Address(ipAddress)
en un código para enumerar todas las IP de un dispositivo.
Como parte de los cambios de API-23 , la clase InetAddressUtils
ahora se ha ido.
¿Cómo puedo reemplazar el código de abajo ahora?
public static String ipAddress() {
try {
for (final Enumeration<NetworkInterface> enumerationNetworkInterface = NetworkInterface.getNetworkInterfaces(); enumerationNetworkInterface.hasMoreElements();) {
final NetworkInterface networkInterface = enumerationNetworkInterface.nextElement();
for (Enumeration<InetAddress> enumerationInetAddress = networkInterface.getInetAddresses(); enumerationInetAddress.hasMoreElements();) {
final InetAddress inetAddress = enumerationInetAddress.nextElement();
final String ipAddress = inetAddress.getHostAddress();
if (! inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipAddress)) {
return ipAddress;
}
}
}
return null;
}
catch (final Exception e) {
LogHelper.wtf(null, e);
return null;
}
}
No pude encontrar algo mejor que convertir a Inet4Address o Inet6Address
public boolean isValidIp4Address(final String hostName) {
try {
return Inet4Address.getByName(hostName) != null;
} catch (UnknownHostException ex) {
return false;
}
}
public boolean isValidIp6Address(final String hostName) {
try {
return Inet6Address.getByName(hostName) != null;
} catch (UnknownHostException ex) {
return false;
}
}
Tenga en cuenta que getHostByName realiza la búsqueda, lo que no siempre es deseable.
O bien, puede obtener la fuente de InetAddessUtils , que a diferencia de getByName (), no realiza la búsqueda, pero solo acepta direcciones de puntos. El código es muy pequeño. Utiliza clases de expresiones regulares que son compatibles con Android. Simplemente elimine la anotación inmutable que no es realmente importante, ¡y se compilará!
Para usar esta biblioteca en el SDK 23, agregue la siguiente línea en el archivo build.gradle del proyecto:
useLibrary ''org.apache.http.legacy''
Usar try catch as logic es una práctica horrible y solo debe hacerse si es totalmente inevitable.
Use algo como esto en su lugar:
if (inetAddress instanceof Inet4Address){
//do something
}
Agregue a continuación a su archivo build.gradle (Module: app),
android {useLibrary ''org.apache.http.legacy''}