Android检测类型的Internet连接问题

时间:2015-06-11 07:05:58

标签: android internet-connection

大家好我无法检测到手机上的互联网连接类型。所以我使用我的代码,当我使用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"/>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

文档说:

  

返回有关当前活动的默认数据网络的详细信息。连接时,此网络是传出连接的默认路由。在启动网络流量之前,您应该始终检查isConnected()。当没有默认网络时,这可能会返回null。

http://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo%28%29

因此,您的info变量可能为NULL,并且在未连接到任何网络时会导致崩溃。

将您的代码更改为:

else if ( info==null) {  text= "no network";  }
else if ((info.getType() == ConnectivityManager.TYPE_WIFI)
                        ) {
                 text= "WIFI"; 
               }