首页 > 代码库 > 让手机连接到指定的WIFI网络,适用于之前已经连过的网络

让手机连接到指定的WIFI网络,适用于之前已经连过的网络

这个例子是从网上找的,我给重新优化了下。这里有个问题是只能连接到之前已经连接过的wifi,目前还没找到连接到陌生wifi(有/无密码)的方法。总之慢慢来吧~

说下思路:

1.通过wifiManager来查找想要链接的wifi是否是之前已经连过的,如果是就进行下一步

2.查找想要链接的wifi名字是否在可搜索的范围内,也就是当前是否可以搜到,如果能搜到就可以连接了

3.通过WifiManager.enableNetwork(getWifiConfigurated(wifi_SSID), true);来连接到指定网络

PS:这里动态注册了一个广播来监听wifi的变化,能比较直观的现实wifi的变化

MainActivity.java

package com.example.testforwifilinkdemo;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.wifi.WifiInfo;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class LinkWifiActivity extends Activity {    private WifiAdmin wifiAdmin;     //这里写想要链接的wifi名字    private final static String TAG_SSID = "CMCC-EDU";        //判断是否连接上制定的wifi    private boolean isConnected = false;        private BroadcastReceiver wifiConnectReceiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_link_wifi);        wifiAdmin = new WifiAdmin(LinkWifiActivity.this);        wifiConnectReceiver = new WifiConnectReceiver();                IntentFilter filter = new IntentFilter();        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        LinkWifiActivity.this.registerReceiver(wifiConnectReceiver, filter);//注册广播        Button linkBtn = (Button) findViewById(R.id.linkWifiBtn);        linkBtn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                connectToTagWifi(TAG_SSID);            }        });    }    class WifiConnectReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {                ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);                NetworkInfo notewokInfo = manager.getActiveNetworkInfo();                if (notewokInfo != null) {                    System.out.println("notewokInfo.getExtraInfo()------->"+ notewokInfo.getExtraInfo());                    WifiInfo currentWifiInfo = wifiAdmin.getCurrentWifiInfo();                    System.out.println("currentWifiInfo.getSSID()----->"+ currentWifiInfo.getSSID());                    if (currentWifiInfo.getSSID().equals("\"" + TAG_SSID + "\"")) {                        isConnected = true;                    }                } else {                    System.out.println("notewokInfo is null");                }            }        }    }    @Override    protected void onDestroy() {        super.onDestroy();        LinkWifiActivity.this.unregisterReceiver(wifiConnectReceiver);//取消广播    }            /**     * @param wifi_SSID     * 关键代码     */    public void connectToTagWifi(String wifi_SSID) {        System.out.println("正在努力连接到指定的wifi");        wifiAdmin.connectConfiguratedWifi(TAG_SSID);            }    }

 

工具类:WifiAdmin.java

package com.example.testforwifilinkdemo;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.net.wifi.ScanResult;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.net.wifi.WifiManager.WifiLock;import android.util.Log;public class WifiAdmin {    private final static String TAG = "WifiAdmin";    public static final int IS_OPENING = 1,IS_CLOSING = 2,IS_OPENED = 3,IS_CLOSED = 4;        private StringBuffer mStringBuffer = new StringBuffer();    private List<ScanResult> scanResultList;    private ScanResult mScanResult;    // 定义WifiManager对象    private WifiManager mWifiManager;    // 定义WifiInfo对象    private WifiInfo mWifiInfo;    // 网络连接列表    private List<WifiConfiguration> mWifiConfigList;    // 定义一个WifiLock    WifiLock mWifiLock;    /**     * 构造方法     */    public WifiAdmin(Context context) {        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);        mWifiInfo = mWifiManager.getConnectionInfo();        mWifiConfigList = mWifiManager.getConfiguredNetworks();    }    /**     * 打开Wifi网卡,能打开就返回true,无法打开返回false     */    public boolean openNetCard() {        if (!mWifiManager.isWifiEnabled()) {            return mWifiManager.setWifiEnabled(true);        }        else{            return false;        }    }    /**     * 关闭Wifi网卡,能关闭返回true,不能关就返回false     */    public boolean closeNetCard() {        if (mWifiManager.isWifiEnabled()) {            return mWifiManager.setWifiEnabled(false);        }        else{            return false;        }    }    /**     * 检查当前Wifi网卡状态,返回四种状态,如果出错返回-1     */    public int getWifitate() {        int result = -1;        switch (mWifiManager.getWifiState()) {        case 0:            Log.i(TAG, "网卡正在关闭");            result = IS_CLOSING;            break;        case 1:            Log.i(TAG, "网卡已经关闭");            result = IS_CLOSED;            break;        case 2:            Log.i(TAG, "网卡正在打开");            result = IS_OPENING;            break;        case 3:            Log.i(TAG, "网卡已经打开");            result = IS_OPENED;            break;        default:            Log.i(TAG, "---_---晕......没有获取到状态---_---");            result = -1;            break;        }        return result;    }    /**     * 扫描周边网络,判断周边是否有wifi,有就返回true,没有就返回false     */    public boolean scan() {        if (getWifitate() == IS_OPENED) {            //开始扫描            mWifiManager.startScan();            //将扫描结果存入数据列中            scanResultList = mWifiManager.getScanResults();            if (scanResultList != null) {                return true;            }        }        return false;    }    /**     * 得到附近wifi的扫描结果,是ScanResult对象     * 得到的是附近网络的结果集,没有就返回null     */    public ArrayList<ScanResult> getScanResult() {        // 每次点击扫描之前清空上一次的扫描结果        if (mStringBuffer != null) {            mStringBuffer = new StringBuffer();        }                scan();// 开始扫描网络        ArrayList<ScanResult> scanResultsList = new ArrayList<ScanResult>();        if (scanResultList != null) {            for (int i = 0; i < scanResultList.size(); i++) {                mScanResult = scanResultList.get(i);                scanResultsList.add(mScanResult);                                /*mStringBuffer = mStringBuffer.append("NO.").append(i)                        .append(" :")                        .append(mScanResult.SSID).append("->")                        .append(mScanResult.BSSID).append("->")                        .append(mScanResult.capabilities).append("->")                        .append(mScanResult.frequency).append("->")                        .append(mScanResult.level).append("->")                        .append(mScanResult.describeContents()).append("\n\n");*/            }            //Log.i(TAG, mStringBuffer.toString());            return scanResultsList;        }        else {            return null;        }    }        /**     * 判断指定的网络是否能被扫描到     * @param wifi_SSID     * @return 如果能够在周边发现指定的网络就返回true,否则返回false     */    public boolean canScannable(String wifi_SSID) {        boolean canScannable = false;        scan();//开始扫描周边网络        //得到扫描到的wifi列表        if (scanResultList != null) {            for (int i = 0; i < scanResultList.size(); i++) {                System.out.println("scanResultList " + i + "----->" + scanResultList.get(i).SSID);                if (scanResultList.get(i).SSID.equals(wifi_SSID)) {                    canScannable = true;//如果想要链接的wifi能够扫描到,那么就说明能够链接                    break;                }            }        }        return canScannable;    }        /**     * 得到指定网络的index(从0开始计数),找不到就返回-1     */    public int getTagWifiId(String netName){        // 开始扫描网络        scan();        scanResultList = mWifiManager.getScanResults();        if (scanResultList != null) {            for (int i = 0; i < scanResultList.size(); i++) {                mScanResult = scanResultList.get(i);                if(mScanResult.SSID.equals(netName)){                    return i;                }                String show = "No = "+i +                         " SSID = "+mScanResult.SSID +                         " capabilities = "+mScanResult.capabilities +                         " level = "+mScanResult.level;                Log.i(TAG, show);            }        }        return -1;    }        /**     * 断开当前连接的网络     */    public void disconnectWifi() {        int netId = getCurrentNetworkId();        mWifiManager.disableNetwork(netId);        mWifiManager.disconnect();        mWifiInfo = null;    }    /**     * 检查当前网络状态     * 如果有wifi链接,返回true,如果没有就返回false     */    public boolean getWifiConnectState() {        return mWifiInfo != null ? true : false;    }        /**     * @return 当前网络的名字,如果没有就返回null,否则返回string     */    public String getCurrentSSID(){        return (mWifiInfo == null) ? null :mWifiInfo.getSSID();    }        /**     * 得到连接的ID,如果没有就返回0,否则返回正确的id     */    public int getCurrentNetworkId() {        return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();    }    /**     * 得到IP地址,出错时返回0     */    public int getCurrentIPAddress() {        return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();    }        /**     * 得到MAC地址     * @return 出錯了返回null     */    public String getCurrentMacAddress() {        return (mWifiInfo == null) ? null : mWifiInfo.getMacAddress();    }    /**     * 得到接入点的BSSID     * @return 出錯返回null     */    public String getCurrentBSSID() {        return (mWifiInfo == null) ? null : mWifiInfo.getBSSID();    }    /**     * 得到WifiInfo的所有信息包     * @return 出错了返回null     */    public WifiInfo getCurrentWifiInfo() {        return (mWifiInfo == null) ? null : mWifiInfo;    }    // 锁定WifiLock    public void acquireWifiLock() {        mWifiLock.acquire();    }    // 解锁WifiLock    public void releaseWifiLock() {        // 判断时候锁定        if (mWifiLock.isHeld()) {            mWifiLock.acquire();        }    }    // 创建一个WifiLock    public void creatWifiLock() {        mWifiLock = mWifiManager.createWifiLock("Test");    }    // 得到配置好的网络    public List<WifiConfiguration> getConfiguration() {        return mWifiConfigList;     }    /**     * @param index     * @return 没有连接到返回false,正在连接则返回true     */    public boolean connectConfiguratedWifi(String wifi_SSID) {        //如果当前网络不是想要链接的网络,要连接的网络是配置过的,并且要连接的网络能够被扫描到        if (getCurrentSSID().indexOf(wifi_SSID) == -1 ) {            if (getWifiConfigurated(wifi_SSID) != -1 && canScannable(wifi_SSID)) {                mWifiManager.enableNetwork(getWifiConfigurated(wifi_SSID), true);            }            else {                return false;            }        }        return true;    }        /**     * 判断要连接的wifi名是否已经配置过了     * @return 返回要连接的wifi的ID,如果找不到就返回-1     */    public int getWifiConfigurated(String wifi_SSID) {        int id = -1;        if (mWifiConfigList != null) {            for (int j = 0; j < mWifiConfigList.size(); j++) {                if (mWifiConfigList.get(j).SSID.equals("\"" + wifi_SSID + "\"")) {                    //如果要连接的wifi在已经配置好的列表中,那就设置允许链接,并且得到id                    id = mWifiConfigList.get(j).networkId;                    break;                }            }        }        return id;    }                }

 

源码下载:http://download.csdn.net/detail/shark0017/7962497

 

让手机连接到指定的WIFI网络,适用于之前已经连过的网络