Obtención mediante programación de los detalles de la puerta de enlace y de la máscara de subred

¿Cómo puedo obtener los detalles de la pasarela y la máscara de subred en Android?

He encontrado una clase llamada DhcpInfo dentro del paquete android.net . Tiene algunas variables públicas que almacena los valores de los parámetros actuales de la red. Pero el problema es que devuelven el valor en entero convertido de 8Bit desplazado binario.

Ejemplo de imagen Describiendo el escenario:

Introduzca aquí la descripción de la imagen

**** Aquí hay un ejemplo de código: **

** archivo java: ****

 package com.schogini.dhcp; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.widget.TextView; import android.net.*; import android.net.wifi.WifiManager; public class dhcpInfo extends Activity { public String s_dns1 ; public String s_dns2; public String s_gateway; public String s_ipAddress; public String s_leaseDuration; public String s_netmask; public String s_serverAddress; TextView info; DhcpInfo d; WifiManager wifii; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE); d=wifii.getDhcpInfo(); s_dns1="DNS 1: "+String.valueOf(d.dns1); s_dns2="DNS 2: "+String.valueOf(d.dns2); s_gateway="Default Gateway: "+String.valueOf(d.gateway); s_ipAddress="IP Address: "+String.valueOf(d.ipAddress); s_leaseDuration="Lease Time: "+String.valueOf(d.leaseDuration); s_netmask="Subnet Mask: "+String.valueOf(d.netmask); s_serverAddress="Server IP: "+String.valueOf(d.serverAddress); //dispaly them info= (TextView) findViewById(R.id.infolbl); info.setText("Network Info\n"+s_dns1+"\n"+s_dns2+"\n"+s_gateway+"\n"+s_ipAddress+"\n"+s_leaseDuration+"\n"+s_netmask+"\n"+s_serverAddress); } } 

Xml Codificación:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.schogini.dhcp" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".dhcpInfo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> </manifest> 

Intenté convertir el valor entero a su equivalente pero no podría. Si lo hace, puede postear de nuevo .. Bye ..

UPDATE: Algunos cómo se las arregló para convertir el IP a v4 Formato de la forma entera Conversión a formato IPv4:

 public String intToIp(int i) { return ((i >> 24 ) & 0xFF ) + "." + ((i >> 16 ) & 0xFF) + "." + ((i >> 8 ) & 0xFF) + "." + ( i & 0xFF) ; } 

IMAGE Courtesy: http://www.bennadel.com/blog/1830-Converting-IP-Addresses-To-And-From-Integer-Values-With-ColdFusion.htm

Formatter.formatIpAddress (int) está obsoleto, y no queremos utilizar métodos obsoletos ¿no?

La versión de AndroidKid de esto es de alguna manera invertida, pero esto debería arreglarlo:

 public String intToIp(int addr) { return ((addr & 0xFF) + "." + ((addr >>>= 8) & 0xFF) + "." + ((addr >>>= 8) & 0xFF) + "." + ((addr >>>= 8) & 0xFF)); } 

Fuente: http://www.devdaily.com/java/jwarehouse/android/core/java/android/net/DhcpInfo.java.shtml

Para formatear el ip, intente usar:

 import android.text.format.Formatter; public String FormatIP(int IpAddress) { return Formatter.formatIpAddress(IpAddress); } 

Utilice Formatter.formatIpAddress(mask); La máscara es tu int.

 String maskk = Formatter.formatIpAddress(mask); 

En vez de conseguir 255.255.255.0, apenas cambie el orden en vuelta;) así que usted podrá conseguir en el orden correcto …

 public String intToIp(int i) { return (i & 0xFF) + "." + ((i >> 8 ) & 0xFF) + "." + ((i >> 16 ) & 0xFF) + "." + ((i >> 24 ) & 0xFF) ; } 

Aunque viejo, funciona como un encanto.

TvGateway.setText (Formatter.formatIpAddress (dhcpInfo.gateway));

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.