Obtener Android WiFi "net.hostname" del código

Cuando un dispositivo Android se conecta a un AP wifi, se identifica con un nombre como:

Android_cc1dec12345e6054

¿Cómo se puede obtener esa cadena desde una aplicación de Android? No con el propósito de cambiarlo, solo para leerlo.

EDITAR:
Esta es una captura de pantalla de la interfaz web de mi enrutador, mostrando una lista de todos los dispositivos conectados. Tenga en cuenta los dos dispositivos Android en la lista – ¿Cómo se puede leer esa cadena desde el código Java que se ejecuta en el dispositivo?

Lista de conexiones del enrutador

Construyendo de la respuesta de @ Merlevede, aquí está una manera rápida y sucia de conseguir la característica. Es una API privada, por lo que está sujeta a cambios, pero este código no se ha modificado desde al menos Android 1.5, por lo que probablemente sea seguro de usar.

import android.os.Build; import java.lang.reflect.Method; /** * Retrieves the net.hostname system property * @param defValue the value to be returned if the hostname could * not be resolved */ public static String getHostName(String defValue) { try { Method getString = Build.class.getDeclaredMethod("getString", String.class); getString.setAccessible(true); return getString.invoke(null, "net.hostname").toString(); } catch (Exception ex) { return defValue; } } 

Utilice el objeto NetworkInterface para enumerar las interfaces y obtener el nombre de host canónico de InetAddress de las interfaces. Puesto que usted desea el nombre del wifi, como atajo usted puede pedir wlan0 directamente y si eso falla usted puede enumerarlos todos como esto:

 import android.test.InstrumentationTestCase; import android.util.Log; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; public class NetworkInterfaceTest extends InstrumentationTestCase { private static final String TAG = NetworkInterfaceTest.class.getSimpleName(); public void testNetworkName() throws Exception { Enumeration<NetworkInterface> it_ni = NetworkInterface.getNetworkInterfaces(); while (it_ni.hasMoreElements()) { NetworkInterface ni = it_ni.nextElement(); Enumeration<InetAddress> it_ia = ni.getInetAddresses(); if (it_ia.hasMoreElements()) { Log.i(TAG, "++ NI: " + ni.getDisplayName()); while (it_ia.hasMoreElements()) { InetAddress ia = it_ia.nextElement(); Log.i(TAG, "-- IA: " + ia.getCanonicalHostName()); Log.i(TAG, "-- host: " + ia.getHostAddress()); } } } } } 

Eso le dará una salida como esta:

 TestRunner﹕ started: testNetworkName ++ NI: lo -- IA: ::1%1 -- host: ::1%1 -- IA: localhost -- host: 127.0.0.1 ++ NI: p2p0 -- IA: fe80::1234:1234:1234:1234%p2p0 -- host: fe80::1234:1234:1234:1234%p2p0 ++ NI: wlan0 -- IA: fe80::1234:1234:1234:1234%wlan0 -- host: fe80::1234:1234:1234:1234%wlan0 -- IA: android-1234567812345678 <--- right here -- host: 192.168.1.234 

Consejo: si InetAddress.getCanonicalHostName().equals(InetAddress.getHostAddress()) puede ignorarlo ya que no es un nombre "real".

No sé si esto ayuda pero aquí voy.

Desde un shell de Unix (puedes descargar cualquier aplicación de Terminal en Google Play), puedes obtener el nombre de host escribiendo

 getprop net.hostname 

Por supuesto esto no es lo que quieres … pero … por otro lado, aquí está la información sobre cómo ejecutar un comando unix de java. Quizás combinando estos dos usted consigue lo que usted está buscando.

Para java :

Usted puede obtener la propiedad por debajo de:

 String str = SystemProperties.get("net.hostname"); 

Prueba esto:

 Class<?> c = Class.forName("android.os.SystemProperties"); Method get = c.getMethod("get", String.class, String.class); String serialNumber = (String) get.invoke(c, "net.hostname", "Error"); if (serialNumber.equals("Error")) { serialNumber = (String) get.invoke(c, "net.hostname", "Error"); } 

Puede utilizar el siguiente código:

 InetAddress address = InetAddress.getLocalHost(); System.out.println(address.getHostName()); // <-- host name is here! 

Y en realidad, puede obtener más información utilizando esta función. Tales como … otros dispositivos hostname que están en la misma red.

  • Evitar que el WiFi se apague
  • Compilar y construir "iw" para Android 4.1 dispositivo?
  • ¿Hay alguna forma de depurar aplicaciones a través de Wi-Fi o bluetooth?
  • Android, cómo anular la comprobación de conectividad a Internet al conectarse a la red wifi?
  • ¿Cómo comprobar si un dispositivo androide está equipado con un adaptador wifi?
  • Android - ¿Cómo saber si el dispositivo es sólo WiFi?
  • ¿Es posible intercambiar mensajes entre 2 dispositivos Android a través de wifi?
  • Obtener IP desde wifi hotspot en android
  • ¿Cómo abrir el cuadro de diálogo del sistema para introducir la contraseña de una red wifi segura en android?
  • SecurityException al obtener los resultados de la exploración Wifi
  • Fuerza de la señal de Android Wifi
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.