连接到蜂窝网络时获取 Android 的 IP 地址
Getting IP address of Android when connected to Cellular Network
在通过移动数据网络连接到互联网时,是否有任何简单的方法来获取我的 phone 的 IP 地址。为了获取 WiFi IP 地址,我使用了以下简单的技术。
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
有没有类似上面的方法获取移动数据网络的IP地址
我使用了以下代码,但它 returns MAC 地址,WiFi 和蜂窝网络的 IP 地址,但我只对蜂窝 IP 地址感兴趣。
String ipAddress = null;
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
ipAddress = inetAddress.getHostAddress().toString();
Log.i("Sarao5",ipAddress);
}
}
}
} catch (SocketException ex) {}
在我的应用程序中使用以下代码 -
public static String getDeviceIPAddress(boolean useIPv4) {
try {
List<NetworkInterface> networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : networkInterfaces) {
List<InetAddress> inetAddresses = Collections.list(networkInterface.getInetAddresses());
for (InetAddress inetAddress : inetAddresses) {
if (!inetAddress.isLoopbackAddress()) {
String sAddr = inetAddress.getHostAddress().toUpperCase();
boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
if (useIPv4) {
if (isIPv4)
return sAddr;
} else {
if (!isIPv4) {
// drop ip6 port suffix
int delim = sAddr.indexOf('%');
return delim < 0 ? sAddr : sAddr.substring(0, delim);
}
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
这是最简单的方法。
希望我的回答对您有所帮助。
应避免使用 Formatter.formatIPAddress
,使用以下获取 IP 地址,与您的代码略有不同;它的一项功能是 returns wifi ip 如果它启用了您需要的其他蜂窝功能,您可以根据需要修改它;
public static String getLocalIpAddress() {
WifiManager wifiMgr = (WifiManager) ApplicationController.getInstance().getSystemService(context.WIFI_SERVICE);
if(wifiMgr.isWifiEnabled()) {
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
String wifiIpAddress = String.format("%d.%d.%d.%d",
(ip & 0xff),
(ip >> 8 & 0xff),
(ip >> 16 & 0xff),
(ip >> 24 & 0xff));
return wifiIpAddress;
}
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
Log.i("","111 inetAddress.getHostAddress(): "+inetAddress.getHostAddress());
//the condition after && is missing in your snippet, checking instance of inetAddress
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
Log.i("","111 return inetAddress.getHostAddress(): "+inetAddress.getHostAddress());
return inetAddress.getHostAddress();
}
}
}
return null;
}
在通过移动数据网络连接到互联网时,是否有任何简单的方法来获取我的 phone 的 IP 地址。为了获取 WiFi IP 地址,我使用了以下简单的技术。
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
有没有类似上面的方法获取移动数据网络的IP地址
我使用了以下代码,但它 returns MAC 地址,WiFi 和蜂窝网络的 IP 地址,但我只对蜂窝 IP 地址感兴趣。
String ipAddress = null;
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
ipAddress = inetAddress.getHostAddress().toString();
Log.i("Sarao5",ipAddress);
}
}
}
} catch (SocketException ex) {}
在我的应用程序中使用以下代码 -
public static String getDeviceIPAddress(boolean useIPv4) {
try {
List<NetworkInterface> networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : networkInterfaces) {
List<InetAddress> inetAddresses = Collections.list(networkInterface.getInetAddresses());
for (InetAddress inetAddress : inetAddresses) {
if (!inetAddress.isLoopbackAddress()) {
String sAddr = inetAddress.getHostAddress().toUpperCase();
boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
if (useIPv4) {
if (isIPv4)
return sAddr;
} else {
if (!isIPv4) {
// drop ip6 port suffix
int delim = sAddr.indexOf('%');
return delim < 0 ? sAddr : sAddr.substring(0, delim);
}
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
这是最简单的方法。
希望我的回答对您有所帮助。
应避免使用 Formatter.formatIPAddress
,使用以下获取 IP 地址,与您的代码略有不同;它的一项功能是 returns wifi ip 如果它启用了您需要的其他蜂窝功能,您可以根据需要修改它;
public static String getLocalIpAddress() {
WifiManager wifiMgr = (WifiManager) ApplicationController.getInstance().getSystemService(context.WIFI_SERVICE);
if(wifiMgr.isWifiEnabled()) {
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
String wifiIpAddress = String.format("%d.%d.%d.%d",
(ip & 0xff),
(ip >> 8 & 0xff),
(ip >> 16 & 0xff),
(ip >> 24 & 0xff));
return wifiIpAddress;
}
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
Log.i("","111 inetAddress.getHostAddress(): "+inetAddress.getHostAddress());
//the condition after && is missing in your snippet, checking instance of inetAddress
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
Log.i("","111 return inetAddress.getHostAddress(): "+inetAddress.getHostAddress());
return inetAddress.getHostAddress();
}
}
}
return null;
}