您可以使用它来确定您是否已连接:
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_STATE
和ACCESS_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.
您还可以使用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列出了可能的网络类型
归档时间: |
|
查看次数: |
11218 次 |
最近记录: |