大家好我无法检测到手机上的互联网连接类型。所以我使用我的代码,当我使用wifi时应用程序返回给我类型Wifi,但当我使用3g连接时,我得到一条消息说应用程序已关闭。有人可以给我一些建议吗?非常感谢。
所以这是我的代码。
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if ((tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA)) {
text = "3g";// for 3g HSDPA networktype will be return as
// per testing(real) in device with 3g enable data
// and speed will also matters to decide 3g network type
} else if ((tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSPAP)) {
text= "4g"; // /No specification for the 4g but from wiki
// i found(HSPAP used in 4g)
// http://goo.gl/bhtVT
} else if ((tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_GPRS)) {
text= "GPRS";
} else if ((tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_EDGE)) {
text= "2g";
}
else if ((info.getType() == ConnectivityManager.TYPE_WIFI)
) {
text= "WIFI";
}
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
我在Manifest中的权限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
有什么想法吗?
答案 0 :(得分:0)
文档说:
返回有关当前活动的默认数据网络的详细信息。连接时,此网络是传出连接的默认路由。在启动网络流量之前,您应该始终检查isConnected()。当没有默认网络时,这可能会返回null。
因此,您的info
变量可能为NULL,并且在未连接到任何网络时会导致崩溃。
将您的代码更改为:
else if ( info==null) { text= "no network"; }
else if ((info.getType() == ConnectivityManager.TYPE_WIFI)
) {
text= "WIFI";
}