【发布时间】:2013-05-22 10:42:35
【问题描述】:
我需要通过 android 的 htttp 或 https 进行通信,并且我需要为我的应用程序“仅 wifi”设置一个设置。这是交流的限制。如何实现这样的事情?我找不到有关 AndroidHttpClient 的任何信息仅适用于 Wifi - 或 3G,以及如何限制它。
【问题讨论】:
标签: android wifi communication 3g restriction
我需要通过 android 的 htttp 或 https 进行通信,并且我需要为我的应用程序“仅 wifi”设置一个设置。这是交流的限制。如何实现这样的事情?我找不到有关 AndroidHttpClient 的任何信息仅适用于 Wifi - 或 3G,以及如何限制它。
【问题讨论】:
标签: android wifi communication 3g restriction
此代码将检查 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;
}
【讨论】:
我听说过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>
【讨论】:
这样试试
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;}
【讨论】:
从 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;
}
【讨论】: