【问题标题】:How to check if wifi/3g is enabled?如何检查是否启用了 wifi/3g?
【发布时间】:2011-04-25 20:17:30
【问题描述】:

我有一个显示一些 RSS 新闻的按钮。我的问题是,如果 wifi 被禁用或没有 3g 连接,我想显示一条吐司消息“没有互联网连接”。如果 wifi 关闭以弹出消息,我必须让它工作,但我的问题是:

我希望应用程序检查用户是否启用了 wifi 或 3g 连接。如果有 3g 去新的活动,如果有 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);
    }

【问题讨论】:

    标签: android


    【解决方案1】:
    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"));
    

    【讨论】:

    • 欢迎来到 SO。如果您要发布一个已经有一个已被接受和赞成的答案的旧问题的答案,那应该是因为接受的答案不正确,或者因为您添加了以前的答案中尚未涵盖的重要新信息。跨度>
    【解决方案2】:

    更复杂的是只检测是否启用了 3g 或 wifi。即使“启用了 3g”,极低的信号也可能会阻止应用获取提要。 wifi也一样(是公共热点吗?是否通过防火墙?

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

    【讨论】:

      【解决方案3】:

      如果根据您使用的 HTTP API(例如 HttpClient)存在 IOException 或类似情况,您应该显示该消息。这样您就不会对 Wifi 管理器和相关服务进行不必要的额外调用。

      如果您无法获取 RSS,则说明用户没有数据服务(Wifi 或 3G)。

      【讨论】:

        【解决方案4】:

        要检查是否启用了 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;
        }
        

        【讨论】:

          【解决方案5】:
          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();
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多