[英]How to determine which network interface is for Wifi, 3G, 4G (LTE) & VPN in Android?
在android中,我通過下面的代碼找到了與該接口關聯的網絡接口名稱和IP地址。
// Iterate over all network interfaces.
for (Enumeration<NetworkInterface> en =
NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
{
NetworkInterface intf = en.nextElement();
// Iterate over all IP addresses in each network interface.
for (Enumeration<InetAddress> enumIPAddr =
intf.getInetAddresses(); enumIPAddr.hasMoreElements();)
{
InetAddress iNetAddress = enumIPAddr.nextElement();
// Loop back address (127.0.0.1) doesn't count as an in-use IP address.
if (!iNetAddress.isLoopbackAddress())
{
sLocalIP = iNetAddress.getHostAddress().toString();
sInterfaceName = intf.getName();
}
}
}
由於網絡接口名稱可能因制造商而異,也可能因同一制造商的不同設備而異。
如何確定哪個網絡接口適用於Android中的wifi,3G,4G(LTE)和VPN?
使用此方法,您可以識別它是Wifi還是移動連接:
private static boolean isConnectedWifi(Context context) {
NetworkInfo info = ConnectionUtil.getNetworkInfo(context);
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI);
}
private static boolean isConnectedMobile(Context context) {
NetworkInfo info = ConnectionUtil.getNetworkInfo(context);
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE);
}
如果是移動連接,您可以使用info.getSubType()
了解更多信息。 使用這樣的方法:
private static String getConnectionType(int type, int subType) {
if (type == ConnectivityManager.TYPE_WIFI) {
return "TYPE_WIFI";
} else if (type == ConnectivityManager.TYPE_MOBILE) {
switch (subType) {
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return "TYPE_UNKNOWN";
case TelephonyManager.NETWORK_TYPE_1xRTT:
return "TYPE_1XRTT"; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_CDMA:
return "TYPE_CDMA"; // ~ 14-64 kbps
case TelephonyManager.NETWORK_TYPE_EDGE:
return "TYPE_EDGE"; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return "TYPE_EVDO_0"; // ~ 400-1000 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return "TYPE_EVDO_A"; // ~ 600-1400 kbps
case TelephonyManager.NETWORK_TYPE_GPRS:
return "TYPE_GPRS"; // ~ 100 kbps
case TelephonyManager.NETWORK_TYPE_HSDPA:
return "TYPE_HSDPA"; // ~ 2-14 Mbps
case TelephonyManager.NETWORK_TYPE_HSPA:
return "TYPE_HSPA"; // ~ 700-1700 kbps
case TelephonyManager.NETWORK_TYPE_HSUPA:
return "TYPE_HSUPA"; // ~ 1-23 Mbps
case TelephonyManager.NETWORK_TYPE_UMTS:
return "TYPE_UMTS"; // ~ 400-7000 kbps
case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8
return "TYPE_IDEN"; // ~25 kbps
// Unknown
default:
return "TYPE_UNKNOWN";
}
} else {
return "TYPE UNKNOWN";
}
}
希望它能幫到你:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.