Wie kann ich in Android Details zu Gateway und Subnetzmaske abrufen?
Ich habe eine Klasse namens DhcpInfo
im Paket Android.net
Gefunden. Es hat einige öffentliche Variablen, die die Werte der aktuellen Netzwerkparameter speichern. Das Problem ist jedoch, dass sie den Wert in Ganzzahl zurückgeben, der aus 8-Bit-verschobenen Binärdaten konvertiert wurde.
Beispielbild, das das Szenario beschreibt:
**** Hier ist ein Beispielcode: **
** Java-Datei: ****
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-Codierung:
<?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>
Ich habe versucht, den ganzzahligen Wert in den entsprechenden Wert umzuwandeln, konnte dies jedoch nicht. Wenn Sie dies tun, können Sie zurück posten .. Tschüss ..
UPDATE: Einige Möglichkeiten zum Konvertieren der IP in das v4-Format aus der Ganzzahlform Konvertierung in das IPv4-Format:
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) ist veraltet und wir möchten keine veralteten Methoden verwenden, oder?
Die Version von AndroidKid ist irgendwie umgekehrt, aber dies sollte das Problem beheben:
public String intToIp(int addr) {
return ((addr & 0xFF) + "." +
((addr >>>= 8) & 0xFF) + "." +
((addr >>>= 8) & 0xFF) + "." +
((addr >>>= 8) & 0xFF));
}
Quelle: http://www.devdaily.com/Java/jwarehouse/Android/core/Java/Android/net/DhcpInfo.Java.shtml
versuchen Sie zum Formatieren der IP Folgendes:
import Android.text.format.Formatter;
public String FormatIP(int IpAddress)
{
return Formatter.formatIpAddress(IpAddress);
}
Benutze Formatter.formatIpAddress(mask);
mask ist dein Int.
String maskk = Formatter.formatIpAddress(mask);
Anstatt 255.255.255.0 zu erhalten, ändern Sie einfach die Reihenfolge im Gegenzug;) Damit Sie in der Lage sind, die richtige Reihenfolge zu erhalten ...
public String intToIp(int i) {
return (i & 0xFF) + "." +
((i >> 8 ) & 0xFF) + "." +
((i >> 16 ) & 0xFF) + "." +
((i >> 24 ) & 0xFF) ;
}
Dies ist ein alter Thread, aber ich habe die offizielle Funktion gefunden, die von Android API (package Android.net.NetworkUtils
) Verwendet wird:
/**
* 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();
}
}
Und sobald Sie InetAddress
haben, können Sie den formatierten String folgendermaßen erhalten:
intToInetAddress(d.gateway).getHostAddress()