【问题标题】:Wifi communication only仅 Wifi 通信
【发布时间】:2013-05-22 10:42:35
【问题描述】:

我需要通过 android 的 htttp 或 https 进行通信,并且我需要为我的应用程序“仅 wifi”设置一个设置。这是交流的限制。如何实现这样的事情?我找不到有关 AndroidHttpClient 的任何信息仅适用于 Wifi - 或 3G,以及如何限制它。

【问题讨论】:

    标签: android wifi communication 3g restriction


    【解决方案1】:

    此代码将检查 wifi 连接。

     public static boolean hasWIFIConnection(Context context)
                        {
                            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
                            NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
                            if (wifiNetwork != null && wifiNetwork.isConnected())
                                {
                                    return true;
                                }
    return false;
    
            }
    

    【讨论】:

    • 您可以检查WIFI连接是否可用并相应限制。
    【解决方案2】:

    我听说过ConnectivityManager 服务中的setNetworkPreference(int preference) 方法。尽管文档很少,但这种方法似乎可以与表示网络类型的整数常量一起使用。

    您可以在 ConnectivityManager 类中找到对此类常量的引用:

    我会开始这样挖掘。

    编辑:

    您需要获得以下权限:

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

    【讨论】:

      【解决方案3】:

      这样试试

      ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo[] netInfo = cm.getAllNetworkInfo();
      for (NetworkInfo ni : netInfo) 
      {
          if (ni.getTypeName().equalsIgnoreCase("WIFI"))
              if (ni.isConnected())
                  haveConnectedWifi = true;
          if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
              if (ni.isConnected())
                  haveConnectedMobile = true;}
      

      【讨论】:

      • 感谢所有答案,这些都是很好的帮助。使用它们,我可以检查是否连接了 wifi。但是我怎样才能命令 AndroidHttpClient 使用 wifi 呢?还是管它也没用?如果没有 Wifi,只显示一个警报对话框并且不进行通信?
      • 在调用 httpclient 之前检查这个条件。如果 wifi 不可用,则显示警报,否则只需继续。
      【解决方案4】:

      从 23 开始不推荐使用 getNetworkInfo,使用 getActiveNetworkInfo

          public boolean hasWIFIConnection()
      {
          ConnectivityManager connMgr = (ConnectivityManager) ContextProvider.getInstance().getApplication().getSystemService(Activity.CONNECTIVITY_SERVICE);
      
          NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();
          if (activeNetwork != null && (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) && activeNetwork.isConnected())
          {
              return true;
          }
          return false;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多