让手机连接到指定的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)