广播过滤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();
}
});版权声明:本文为qq_21216109原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。