如何检查Android中是否真的连接了wifi

hen*_*yao 2 android android-wifi

我想我的Android设备连接到wifi热点.我创建了一个新的wificonfiguration并将其添加到wifimanager,这wificonfigurationNetworkId.然后我调用该函数wifi.enableNetwork(NetworkId, true).

在那之后,我认为请求者将通过获取IP地址,身份验证,并最终物理连接到热点.那么有没有办法确定wifi是否物理连接?

我更喜欢类似处理程序的方法.

Kra*_*uxe 10

你可以试试这个:

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (wifi.isConnected()) {
    // Your code here
}
Run Code Online (Sandbox Code Playgroud)

编辑:更多详情:

BroadcastReceiver在您的清单中注册一个如下:

<receiver android:name="WifiReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        <action android:name="android.net.wifi.STATE_CHANGE"/>
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

然后将上面的代码放在onReceive()接收器的方法上,如下所示:

@Override
public void onReceive(Context context, final Intent intent) {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (wifi.isConnected()) {
        // Your code here
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,现在不推荐使用cm.getNetworkInfo. (6认同)

San*_*eep 6

您可以检查所有网络.如果您只想要WIFI,则可以删除检查其他2个网络.

public static boolean hasInternetConnection()
{
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiNetwork != null && wifiNetwork.isConnected())
    {
        return true;
    }
    NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (mobileNetwork != null && mobileNetwork.isConnected())
    {
        return true;
    }
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected())
    {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

不要忘记在清单中添加以下内容:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Run Code Online (Sandbox Code Playgroud)