2009-11-15 100 views

回答

0

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

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
int networkType = telephonyManager.getNetworkType(); 

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

+0

不支持WiFi的工作,不是吗? – shkschneider 2012-08-23 17:43:45

+0

不,这就是为什么我说“你也可以......”以防万一有人需要知道正在使用的移动网络的类型。其他答案中至少有一些只说明连接是WiFi还是移动。 – Intrications 2012-08-23 19:32:32

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) ); 
} 

此代码需要权限ACCESS_NETWORK_STATEACCESS_WIFI_STATE

编辑public NetworkInfo getNetworkInfo (int networkType)has been deprecated in 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; 

我限制了该代码到Wi-Fi和3G按照任择议定书的问题,但它很容易把它扩大到新增加的连接类型,如以太网或Wi - 最大。

+0

感谢您的关心。我试图用这种方式来使用这个代码,但是如果(连接的)startActivity(intent7); \t} – user667340 2011-08-23 15:20:11

+0

这意味着在连接时执行的代码中存在错误。但不是在未连接时执行的代码中。 – Shlublu 2011-08-23 15:21:45

+0

请指导我如何才能在案件陈述,如果其连接到互联网它应该打开另一个意图,否则它只是显示在吐司。 – user667340 2011-08-23 15:27:14

2

不知道为什么你的应用程序崩溃,也许这有助于。也许试试这个方法:(需要应用程序上下文)

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 */ 
} 

希望这有助于