检查Wifi是不是在android中连接的正确方法
Posted
技术标签:
【中文标题】检查Wifi是不是在android中连接的正确方法【英文标题】:Proper way to check if Wifi is connected in android检查Wifi是否在android中连接的正确方法 【发布时间】:2017-08-10 19:13:58 【问题描述】:对于我的应用,在与服务器联系之前,我需要确保用户已连接到 wifi。我找到了两种方法可以做到这一点,但我不确定一个是否足够。
首先我要添加这个:
WifiManager wifiManager = (WifiManager) getActivity().getApplicationContext()
.getSystemService(WIFI_SERVICE);
if (!wifiManager.isWifiEnabled())
buildAlertNoWifi();
showProgressDialog(false, "");
return;
然后我正在这样做:
ConnectivityManager cm = (ConnectivityManager) getActivity()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) // connected to the internet
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
// connected to wifi
else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
// connected to the mobile provider's data plan
Toast.makeText(getContext(), "Make sure you connect to wifi.", Toast.LENGTH_LONG).show();
return;
else
Toast.makeText(getContext(), "Make sure you connect to wifi.", Toast.LENGTH_LONG).show();
return;
所以我想知道wifiManager.isWifiEnabled()
是否返回设备是已连接 到 wifi 还是刚刚打开了 wifi。如果是这样,单独使用它就足够了吗?
【问题讨论】:
How do I see if Wi-Fi is connected on android?的可能重复 下面的很多答案都建议使用现在已弃用(从 API 29 开始)的方法,例如getActiveNetworkInfo()
,Android 现在建议一些处理网络信息的新方法,请参阅我的答案 @987654322 @.
【参考方案1】:
我相信WifiManager.isWifiEnabled()
只会检查设备的 wifi 是否打开。请使用NetworkInfo.isConnected()
或NetworkInfo.isConnectedOrConnecting()
检查是否连接到任何网络。
【讨论】:
但是即使设备连接到移动数据,NetworkInfo.isConnected()
也会返回 true 对吧?那么安全的方法是我的第二种方法?
是的,您应该将它与上面的连接类型检查结合使用。【参考方案2】:
最佳实践
public boolean isWifiConnected()
NetworkInfo net = getActiveNetworkInfo();
return (isConnected(net) && net.getType() == TYPE_WIFI);
private NetworkInfo getActiveNetworkInfo()
ConnectivityManager connManager = (ConnectivityManager)
Application.getContext()
.getSystemService(Application.CONNECTIVITY_SERVICE);
return connManager.getActiveNetworkInfo();
【讨论】:
什么是 MagazineApplication?`【参考方案3】:我相信这应该可行,
public boolean isWifiConnected()
ConnectivityManager cm = (ConnectivityManager)this.mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
return (cm != null) && (cm.getActiveNetworkInfo() != null) &&
(cm.getActiveNetworkInfo().getType() == 1);
【讨论】:
以上是关于检查Wifi是不是在android中连接的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何检查设备是不是通过 WiFi - Direct 连接到另一台设备?
如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]
如何在 android 中检查我的 android 设备是不是有互联网连接? [复制]