我不希望我的用户尝试下载某些东西,除非他们连接了 Wi-Fi。但是,我似乎只能判断是否启用了 Wi-Fi,但他们仍然可以连接 3G。
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE); android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState(); NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s); if (state != NetworkInfo.DetailedState.CONNECTED) { return false; }
但是,状态不是我所期望的。即使连接了 Wi-Fi,我也得到OBTAINING_IPADDR了状态。
OBTAINING_IPADDR
您应该能够使用 ConnectivityManager 来获取 Wi-Fi 适配器的状态。从那里您可以检查它是否已连接甚至可用。
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { // Do whatever }
注意: 应该注意(对于我们这里的 n00bies),您需要添加
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
给你的
AndroidManifest.xml 使其工作。
NOTE2 :public NetworkInfo getNetworkInfo (int networkType)现在已弃用:
public NetworkInfo getNetworkInfo (int networkType)
此方法在 API 级别 23 中已弃用。此方法不支持相同类型的多个连接网络。请改用 getAllNetworks() 和 getNetworkInfo(android.net.Network)。
NOTE3 :public static final int TYPE_WIFI现在已弃用:
public static final int TYPE_WIFI
此常量在 API 级别 28 中已弃用。应用程序应改为使用 NetworkCapabilities.hasTransport(int) 或 requestNetwork(NetworkRequest, NetworkCallback) 来请求适当的网络。对于支持的传输。