Comment puis-je obtenir les détails de la passerelle et du masque de sous-réseau dans Android ?
Réponses
Trop de publicités?J'ai trouvé une classe appelée DhcpInfo
au sein de la android.net
l'emballage. Il possède des variables publiques qui stockent les valeurs des paramètres actuels du réseau. Mais le problème est qu'elles renvoient la valeur sous forme d'entier converti à partir d'un binaire décalé de 8 bits.
Exemple d'image décrivant le scénario :
****Voici un exemple de code:**
**fichier 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 Codage :
<?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>
J'ai essayé de convertir la valeur entière en son équivalent, mais je n'y suis pas parvenu. Si vous le faites, vous pouvez renvoyer un message Au revoir
MISE A JOUR : J'ai réussi à convertir l'IP en format v4 à partir de la forme entière. Conversion au format 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 obsolète, et nous ne voulons pas utiliser des méthodes obsolètes, n'est-ce pas ?
La version d'AndroidKid est en quelque sorte inversée, mais ceci devrait la corriger :
public String intToIp(int addr) {
return ((addr & 0xFF) + "." +
((addr >>>= 8) & 0xFF) + "." +
((addr >>>= 8) & 0xFF) + "." +
((addr >>>= 8) & 0xFF));
}
Source : http://www.devdaily.com/java/jwarehouse/Android/core/java/Android/net/DhcpInfo.java.shtml
C'est un vieux fil, mais j'ai trouvé la fonction officielle utilisée par l'API Android (package android.net.NetworkUtils
):
/**
* Convert a IPv4 address from an integer to an InetAddress.
* @param hostAddress an int corresponding to the IPv4 address in network byte order
*/
public static InetAddress intToInetAddress(int hostAddress) {
byte[] addressBytes = { (byte)(0xff & hostAddress),
(byte)(0xff & (hostAddress >> 8)),
(byte)(0xff & (hostAddress >> 16)),
(byte)(0xff & (hostAddress >> 24)) };
try {
return InetAddress.getByAddress(addressBytes);
} catch (UnknownHostException e) {
throw new AssertionError();
}
}
Et une fois que vous avez InetAddress
vous pouvez obtenir la chaîne formatée de cette façon :
intToInetAddress(d.gateway).getHostAddress()
- Réponses précédentes
- Plus de réponses