广播过滤Action
WifiManager.NETWORK_STATE_CHANGED_ACTION
工具类
package com.yw.wifipage.wifi; import android.content.Context; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import com.yw.wifipage.receiver.WifiChangeReceiver; public class WifiConnectUtil { private boolean isConnect = false; private WifiChangeReceiver receiver; public void connect(Context context, String ssid, String bssid, String password, int timeOut, IConnectListener listener) { String mssid = ssid.replace("\"", ""); WifiConfiguration wifiCong = new WifiConfiguration(); wifiCong.allowedAuthAlgorithms.clear(); wifiCong.allowedGroupCiphers.clear(); wifiCong.allowedKeyManagement.clear(); wifiCong.allowedPairwiseCiphers.clear(); wifiCong.allowedProtocols.clear(); wifiCong.SSID = "\"" mssid "\""; wifiCong.BSSID = bssid; wifiCong.preSharedKey = "\"" password "\"";//WPA-PSK密码 wifiCong.hiddenSSID = false; wifiCong.status = WifiConfiguration.Status.ENABLED; int id = MyNetworkUtil.getInstance().getWifiManager().addNetwork(wifiCong); MyNetworkUtil.getInstance().getWifiManager().enableNetwork(id, true); ////注册广播快速监控连接状态 receiver = new WifiChangeReceiver(networkInfo -> { if (networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { WifiInfo wifiInfo = MyNetworkUtil.getInstance().getWifiInfo(); if (wifiInfo.getSSID().replace("\"", "").equals(mssid)) { isConnect = true; if (receiver != null) { context.unregisterReceiver(receiver); receiver = null; listener.onConnected(); } } } }); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); context.registerReceiver(receiver, intentFilter); ///延迟监控变化 new Handler().postDelayed(new Runnable() { @Override public void run() { if (isConnect) { return; } if (receiver != null) { context.unregisterReceiver(receiver); } MyNetworkUtil.getInstance().getWifiManager().removeNetwork(id); MyNetworkUtil.getInstance().getWifiManager().reconnect(); listener.onConnectFail(); } }, timeOut); } public interface IConnectListener { void onConnected(); void onConnectFail(); } }
广播接收器
package com.yw.wifipage.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Parcelable; public class WifiChangeReceiver extends BroadcastReceiver { private String TAG = "WifiChangeReceiver"; private IWIfiChangeCallBack iwIfiChangeCallBack; public WifiChangeReceiver(IWIfiChangeCallBack iwIfiChangeCallBack) { this.iwIfiChangeCallBack = iwIfiChangeCallBack; } @Override public void onReceive(Context context, Intent intent) { Parcelable extra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (extra != null) { NetworkInfo networkInfo = (NetworkInfo) extra; if (networkInfo != null) { iwIfiChangeCallBack.onChange(networkInfo); } } } }
使用方法
new WifiConnectUtil().connect(context, SSID, BSSID, password, 10000, new WifiConnectUtil.IConnectListener() { @Override public void onConnected() { Toast.makeText(context, "连接成功", Toast.LENGTH_SHORT).show(); } @Override public void onConnectFail() { Toast.makeText(context, "密码错误", Toast.LENGTH_SHORT).show(); } });