如何检查wifi/3g是否启用?

问题描述:

我有一个提供RSS新闻的按钮。我的问题是,如果wifi被禁用或没有3G连接,我想提出一个“没有互联网连接”的烤面包信息。我必须让它工作,如果wifi关闭弹出消息,但我的问题是:如何检查wifi/3g是否启用?

我想让应用程序检查用户是否启用了wifi或3G连接。如果有3克去新的活动,如果有wifi不仅检查它是否启用,但如果用户连接到网络,然后去新的活动。如果3G或WiFi无法使用,我只想提出我之前写的信息。

这是我写的,现在的代码,但我真的不知道该怎么继续......

清单:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

而对于我onCreate方法来源:

@Override 
public void onCreate(Bundle icicle) 
{ 
     super.onCreate(icicle); 
     setContentView(R.layout.main2); 

     wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 

     if (wifiManager.isWifiEnabled()) 
     { 

      wifiManager.setWifiEnabled(true); // an einai anoixto asto anoixto 
     } 
     else 
     { 

      Toast.makeText(nea.this, "Χρειάζεστε σύνδεση στο internet", Toast.LENGTH_SHORT).show(); 
      finish(); 
     } 

     loadFeed(ParserType.DOM); 
    } 

根据您使用的HTTP API,如果出现IOException或类似情况,应该显示该消息(HttpClie nt例如)。这样您就不会对Wifi管理员和相关服务进行不必要的额外呼叫。

如果您不能获取RSS,那么用户没有数据服务(Wifi或3G)。

+0

谢谢队友!我已经修好了 – kostas 2011-04-25 20:35:54

检测3g或wifi是否启用是比较复杂的。即使“3g已启用”,非常低的信号也可能阻止应用程序获取Feed。与wifi相同(是公共热点吗?是否通过防火墙?

Ping您的服务器并设置超时。如果您没有在设定的时间内得到响应(比如1-5秒),然后显示烤面包,或更好的按钮来修改无线设置(http://developer.android.com/reference/android/provider/Settings.html#ACTION_WIRELESS_SETTINGS)

为了检查3G是否启用,您可以使用下面的代码也。但如果网络犯规支持3G,这将返回false。

int type = telephonymanager.getNetworkType(); 

if (type == TelephonyManager.NETWORK_TYPE_HSDPA 
    || type == TelephonyManager.NETWORK_TYPE_HSPA 
    || type == TelephonyManager.NETWORK_TYPE_HSUPA 
    || type == TelephonyManager.NETWORK_TYPE_UMTS 
    || type == TelephonyManager.NETWORK_TYPE_EVDO_0 
    || type == TelephonyManager.NETWORK_TYPE_EVDO_A) { 

    Toast.makeText(RemoteService.this, "network type " + type, Toast.LENGTH_SHORT).show(); 
    threegmode = true; 
} 
else { 
    threegmode = false; 
} 

private static boolean isConnected(Context context) { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = null; 
     if (connectivityManager != null) { 

      networkInfo = connectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

      if (!networkInfo.isAvailable()) { 
       networkInfo = connectivityManager 
         .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
      } 
     } 
     return networkInfo == null ? false : networkInfo.isConnected(); 
    } 

ConnectivityManager conMan = ((ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE)); 
boolean isWifiEnabled = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable(); 
boolean is3GEnabled = !(conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED 
         && conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getReason().equals("dataDisabled")); 
+1

欢迎来到SO。如果您要发布已接受并且已获得最佳答案的旧问题的答案,应该是因为接受的答案不正确,或者因为您添加了以前答案中未涵盖的重要新信息。 – 2012-10-02 16:31:48