Android 应用内连接指定 WIFI

广播过滤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版权协议,转载请附上原文出处链接和本声明。