如何通过编程知道设备是否连接到Wifi或3G网络

7
我如何在程序中判断设备是否连接到Wifi或3G网络?
谢谢。
2个回答

8
您可以使用WifiManager类,如此处所述。
编辑: 通过调用WifiManager类的getConnectionInfo()函数,您将获得WifiInfo对象。
WifiInfo具有getBSSID()函数,可提供连接的AP名称。
如果为null,则表示未通过Wifi连接到任何AP(Wifi未启用)。
顺便说一下,在寻找更多信息时,我发现这个页面应该回答了您关于移动连接和Wifi连接的所有问题。

该链接显示WiFi连接是否可用。我如何知道是使用3G/2G连接的呢? 谢谢, - praveenb
我在那个链接中看到了这个词语:“如果设备通过移动连接”。这是什么意思呢?这是否意味着通过3G/2G连接呢?请告知。谢谢。 - praveenb
不确定如何使用SDK查找连接到3G/2G的状态。 - N30
在我的T-Mobile G2X上,这种方法不可靠。它返回最后连接的网络(我认为),即使当前没有连接。作者在最后一段提供的链接有效。我们可以假设它在大多数设备上是一致的吗? - Ivan

0

这是我的工作样例:

public boolean isNetworkTypeMobile() {
    final ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    return (cm!=null && cm.getActiveNetworkInfo()!=null && isNetworkTypeMobile(cm.getActiveNetworkInfo().getType()));
}

public static boolean isNetworkTypeMobile(int networkType) {
    switch (networkType) {
        case ConnectivityManager.TYPE_MOBILE: //0
        case ConnectivityManager.TYPE_MOBILE_MMS: //2
        case ConnectivityManager.TYPE_MOBILE_SUPL: //3
        case ConnectivityManager.TYPE_MOBILE_DUN: //4
        case ConnectivityManager.TYPE_MOBILE_HIPRI: //5
        case 10:
        case 11:
        case 12:
        case 14:
            return true;
        default:
            return false;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接