检查手机是不是使用 WIFI 或 Data/3G
Posted
技术标签:
【中文标题】检查手机是不是使用 WIFI 或 Data/3G【英文标题】:Check whether mobile is using WIFI or Data/3G检查手机是否使用 WIFI 或 Data/3G 【发布时间】:2013-06-13 10:58:20 【问题描述】:假设设备上同时启用了 WIFI 和 Data/3G,我如何检查用户当前是否通过 wifi 或数据计划使用互联网(假设它们都已启用)。所以我不需要检查它们是启用还是禁用,我想检测用户实际使用的是哪一个。
我一直在做以下事情,这是唯一的解决方案吗?
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState.CONNECTED)
String ssid = wifiInfo.getSSID();
【问题讨论】:
看看这个 (***.com/a/11343250/833647) @KenWolf 非常好的链接 android : Check 3G or Wifi network is ON or Available or not on android Device的可能重复 如果您得到了答复,请批准? 【参考方案1】:void chkStatus()
final ConnectivityManager connMgr = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isConnectedOrConnecting ())
Toast.makeText(this, "Wifi", Toast.LENGTH_LONG).show();
else if (mobile.isConnectedOrConnecting ())
Toast.makeText(this, "Mobile 3G ", Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "No Network ", Toast.LENGTH_LONG).show();
【讨论】:
这是什么投反对票,请发表评论,这样我就可以在我知道我非常正确的情况下解决我的答案 如果已经回答,请链接到问题而不是抄袭答案。答案当然是正确的——毕竟是你抄袭的。但是,这只会在 SO 上创建重复项,从而降低 SO 的整体可用性。 你的答案是错误的。 isAvailable() 告知是否可以通过 wifi 或移动设备进行网络连接,但不告知是否存在实际连接。您必须检查 isConnectedOrConnecting() 或仅检查 isConnected()。 感谢您指出这一点,我会更新我的答案,但我相信它解决了 ARMAGEDDON 的问题。 此解决方案已弃用,请参阅***.com/questions/32547006/… 了解新解决方案【参考方案2】:您可以使用以下方法每次检查网络状态:
public static String checkNetworkStatus(final Context context)
String networkStatus = "";
// Get connect mangaer
final ConnectivityManager connMgr = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
// check for wifi
final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
// check for mobile data
final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if( wifi.isAvailable() )
networkStatus = "wifi";
else if( mobile.isAvailable() )
networkStatus = "mobileData";
else
networkStatus = "noNetwork";
return networkStatus;
// end checkNetworkStatus
//vKj
【讨论】:
【参考方案3】: public boolean CheckConnectivity(final Context c)
ConnectivityManager mConnectivityManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
if (mConnectivityManager.getActiveNetworkInfo() != null
&& mConnectivityManager.getActiveNetworkInfo().isAvailable()
&& mConnectivityManager.getActiveNetworkInfo().isConnected())
return true;
else
return false; // make it false
【讨论】:
这个是检查网络是否连接,它不会告诉你是否连接了wifi或移动数据【参考方案4】:getNetworkInfo
是一种已弃用的方法。
我建议使用getActiveNetworkInfo
例子
private String checkNetworkStatus(Context context)
String networkStatus = "";
final ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if( manager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI)
networkStatus = "wifi";
else if(manager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_MOBILE)
networkStatus = "mobileData";
else
networkStatus="noNetwork";
return networkStatus;
【讨论】:
在您的代码中,wifi 和移动对象具有相同的值。 这是如何获得 3 票的?您正在从同一个NetworkInfo
对象返回一个值。以上是关于检查手机是不是使用 WIFI 或 Data/3G的主要内容,如果未能解决你的问题,请参考以下文章