查询ConnectivityManager的getActiveNetwork函数

4
需要知道getActiveNetwork返回什么样的值。我正在使用的代码如下:
    ConnectivityManager connectivityManager =  (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);    
    Network network = connectivityManager.getActiveNetwork(); 
    Log.e(TAG,"Network : " + network.toString());

输出返回数字,那个数字实际上代表什么?


目前我在日志中收到了这个信息:网络 = 138。 - aman arora
7个回答

2

很好,许多人提到使用 connectivityManager.activeNetworkInfo.typeconnectivityManager.activeNetworkInfo.typeName 在6.0 SDK版本之前已经被弃用。

我遇到了类似的情况,需要支持最低5.0和>= 6.0设备。以下是我的解决方法。

if (SDK_INT >= M) {
        connectivityManager.activeNetwork
                ?.let { connectivityManager.getNetworkCapabilities(it) }
                ?.takeIf { it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) }
                ?.takeIf { connectivityManager.activeNetworkInfo.isConnected }
                ?.let { return "Wifi is Connected" 
                     //Just to make a point. Better be a sealed class.
                }
    } else {
        connectivityManager.activeNetworkInfo
                ?.takeIf { it.isConnected && it.type == ConnectivityManager.TYPE_WIFI }
                ?.let { return "Wifi is Connected" }
    }

 return "Wifi is Disconnected"

1
基于 Network 类的代码:
@Override
public String toString() { 
    return Integer.toString(netId);
}

返回的值是分配给默认数据网络的Network_Id。

1
使用 ConnectivityManager 的一种方法通常是检查当前是否有网络访问。通过 getActiveNetworkInfo,您可以检查是否有 Wifi、蓝牙或移动连接。

例如,以下是您可以检查应用程序是否通过 wifi 或移动网络具有 Internet 访问权限的方式:
ConnectivityManager connectivityManager =  (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo == null 
    || !networkInfo.isConnected() 
    || (networkInfo.getType() != ConnectivityManager.TYPE_WIFI 
    && networkInfo.getType() != ConnectivityManager.TYPE_MOBILE)) {
     // No internet connectivity for any reason
}

3
从Android 9 P,API 28开始,此功能已被弃用。 - Zbarcea Christian

0

connectivityManager.getActiveNetwork(); 实际上返回一个对应于当前活动默认数据网络的 Network 对象。因此,数字值将是分配给该活动网络的常量值。 如果您想检查哪种类型的网络处于活动状态,我会给您提供一个示例,请查看下面的内容。

public boolean isNetworkConnected(Context mContext) {
        final String DEBUG_TAG = "NetworkStatusExample";
        ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService(CONNECTIVITY_SERVICE);
        boolean isWifiConn=false;
        boolean isMobileConn=false;
        Network nn=connMgr.getActiveNetwork();
        Network[] networkinf=connMgr.getAllNetworks();
        for (int a=0;a<networkinf.length;a++) {
            NetworkCapabilities networkCapabilities = connMgr.getNetworkCapabilities(networkinf[a]);
            if (networkCapabilities.hasTransport(networkCapabilities.TRANSPORT_CELLULAR)){
                isMobileConn=true;
            }
            else if (networkCapabilities.hasTransport(networkCapabilities.TRANSPORT_WIFI)){
                isWifiConn=true;
            }
        }
        Log.i(DEBUG_TAG, "Wifi connected: " + isWifiConn);
        Log.i(DEBUG_TAG, "Mobile connected: " + isMobileConn);
        editor.putBoolean("isConnected",isMobileConn);
        editor.apply();
        if (isMobileConn || isWifiConn){
            Log.i(DEBUG_TAG, "Network Status..." + isMobileConn);
            return true;
        }
        else {
            return false;
        }
    }

0

不要使用getActiveNetwork(),而是使用getActiveNetworkInfo()。在那里,您将获得一个NetworkInfo对象,该对象具有getType()方法。在Javadoc中,您可以找到所有可能的值。


0

-1
它返回网络状态,比如网络是否可用。如果您想获取网络信息,可以使用getActiveNetworkInfo()函数。它将提供以下类似的信息:
NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "WIFI_NAME", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false, simId: 0

请尝试在回答中提供确切的上下文。如果无法,请添加注释。 - Prashant

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