如何确定Android互联网连接?

Chr*_*ris 7 networking android

如何确定Android设备可用的当前互联网连接类型?例如,它返回WiFi,3G,没有.

Shl*_*blu 7

您可以使用它来确定您是否已连接:

final ConnectivityManager connectManager = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE); // ctx stands for the Context
final NetworkInfo mobile = connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
final NetworkInfo wifi   = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI  );

// Return true if connected, either in 3G or wi-fi
return ((mobile != null && mobile.getState() == NetworkInfo.State.CONNECTED) || 
        (wifi   != null && wifi.getState()   == NetworkInfo.State.CONNECTED)   );
}
Run Code Online (Sandbox Code Playgroud)

此代码需要权限ACCESS_NETWORK_STATEACCESS_WIFI_STATE.

编辑:public NetworkInfo getNetworkInfo (int networkType) 已在API 21中弃用.对于高于20的API级别,您可以执行以下操作:

final Network[] networks = connectManager.getAllNetworks();
boolean connected = false;

for (int ctr = 0; !connected && ctr < networks.length; ++ctr) {
    final NetworkInfo network = connectManager.getNetworkInfo(networks[ctr]);
    final int netType = network.getType();

    connected = (network.getState() == NetworkInfo.State.CONNECTED) &&
            (
                netType == ConnectivityManager.TYPE_MOBILE     ||
                netType == ConnectivityManager.TYPE_WIFI     /*||
                netType == ConnectivityManager.TYPE_WIMAX      ||
                netType == ConnectivityManager.TYPE_ETHERNET */  );
}

return connected;
Run Code Online (Sandbox Code Playgroud)

我根据OP的问题将此代码限制为Wi-Fi和3G,但很容易将其扩展到新增的连接类型,如以太网或Wi-Max.


Int*_*ons 0

您还可以使用TelephonyManager找出移动网络类型:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int networkType = telephonyManager.getNetworkType();
Run Code Online (Sandbox Code Playgroud)

http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkType%28%29列出了可能的网络类型