我该如何确定Android设备当前可用的互联网连接类型?例如,返回WiFi、3G或无连接。
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) );
}
ACCESS_NETWORK_STATE
和 ACCESS_WIFI_STATE
权限。
编辑: public NetworkInfo getNetworkInfo (int networkType)
在API 21中已被弃用。对于API级别高于20的情况,您可以按照以下方式进行: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;
不知道为什么你的应用程序会崩溃,也许这可以帮助你。 也许尝试这个方法:(需要应用程序上下文)
public static boolean isInternetConnectionActive(Context context) {
NetworkInfo networkInfo = ((ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if(networkInfo == null || !networkInfo.isConnected()) {
return false;
}
return true;
}
if(isInternetConnectionActive(getApplicationContext)) {
/* start Intent */
}
else {
/* show Toast */
}
看看这篇帖子,我回答了同样的问题{{link1:如何在Android应用程序中保存请求并重新发送}}
您还可以使用TelephonyManager来查找移动网络类型:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int networkType = telephonyManager.getNetworkType();
可能的网络类型列在http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkType%28%29中。
ctx
就是Context
。所以,例如这段代码应该放在一个Activity
中。 (啊,也许这就是为什么这个答案很久以前被踩了) - Shlublupublic boolean connectiontype()
。当调用Android时会崩溃。我在清单中添加了"Internet"。是否应该添加其他权限?我看到您创建了一个“在聊天中继续此讨论”的链接,我试图跟随它,但它不可用。如果您方便时打开一个链接,我会跟进以协助调试答案...或者在这里跟进我发现的内容。 - L. D. JamesACCESS_NETWORK_STATE
,ACCESS_WIFI_STATE
解决了这些崩溃问题。 - L. D. James