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
- Devolución de llamada en el dispositivo que se conecta a Wifi Hotspot
- Cómo obtener redes wifi disponibles y mostrarlas en una lista en android
- El estado WiFi no está habilitado
- Las cookies no se reciben en los datos móviles, pero recibió con wifi durante el registro en android (dispositivo es sony xperia)
- ¿Cuál es el significado de Rssi en android WifiManager
¿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?
- Programáticamente obtener conexión Wifi contraseña?
- ¿Cómo acceder a com.android.internal.R.bool en la aplicación?
- ¿Cómo pueden los usuarios / desarrolladores configurar la configuración de proxy de Android para las versiones 2.x?
- Proveedor wifi onLocationChanged nunca se llama
- No se puede trabajar con Android en una red corporativa con seguridad WPA / WPA2. Siempre desconecta?
- Cómo configurar la configuración avanzada de wifihotspot android
- ¿Por qué tiene Wifi activado, pero no conectado Ayuda ubicación de red, cuando se utiliza LocationManager?
- Intención de abrir la configuración Wi-Fi Direct
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.