美文网首页Android开发Android
Wifi自动打开并连接(success)

Wifi自动打开并连接(success)

作者: 瑟闻风倾 | 来源:发表于2017-09-08 13:47 被阅读120次

1、WifiAdmin类

package com.jack.workticket.remote;

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 java.util.List;

/**

 * Created by liy on 2017-08-16.

 */

public class WifiAdmin {

    // 定义WifiManager对象

    private WifiManager mWifiManager;

    // 定义WifiInfo对象

    private WifiInfo mWifiInfo;

    // 扫描出的网络连接列表

    private List<ScanResult> mWifiList;

    // 网络连接列表

    private List<WifiConfiguration> mWifiConfiguration;

    // 定义一个WifiLock

    WifiManager.WifiLock mWifiLock;

    // 构造器

    public WifiAdmin(Context context) {

        // 取得WifiManager对象

        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

        // 取得WifiInfo对象

        mWifiInfo = mWifiManager.getConnectionInfo();

    }

//判断wifi是否成功连接

public boolean isWifiConnect(Context context) {

ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo mWifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    return mWifi.isConnected();

}

    // 打开WIFI

    public void openWifi() {

        if (!mWifiManager.isWifiEnabled()) {

            mWifiManager.setWifiEnabled(true);

        }

    }

    // 关闭WIFI

    public void closeWifi() {

        if (mWifiManager.isWifiEnabled()) {

            mWifiManager.setWifiEnabled(false);

        }

    }

    // 检查当前WIFI状态

    public int checkState() {

        return mWifiManager.getWifiState();

    }

    // 锁定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 mWifiConfiguration;

    }

    // 指定配置好的网络进行连接

    public void connectConfiguration(int index) {

        // 索引大于配置好的网络索引返回

        if (index > mWifiConfiguration.size()) {

            return;

        }

        // 连接配置好的指定ID的网络

        mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,true);

    }

    public void startScan() {

        mWifiManager.startScan();

        // 得到扫描结果

        mWifiList = mWifiManager.getScanResults();

        // 得到配置好的网络连接

        mWifiConfiguration = mWifiManager.getConfiguredNetworks();

    }

    // 得到网络列表

    public List<ScanResult> getWifiList() {

        return mWifiList;

    }

    // 查看扫描结果

    public StringBuilder lookUpScan() {

        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < mWifiList.size(); i++) {

            stringBuilder.append("Index_" + new Integer(i + 1).toString() + ":");

            // 将ScanResult信息转换成一个字符串包

            // 其中把包括:BSSID、SSID、capabilities、frequency、level

            stringBuilder.append((mWifiList.get(i)).toString());

            stringBuilder.append("/n");

        }

        return stringBuilder;

    }

    // 得到MAC地址

    public String getMacAddress() {

        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();

    }

    // 得到接入点的BSSID

    public String getBSSID() {

        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();

    }

    // 得到IP地址

    public int getIPAddress() {

        return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();

    }

    // 得到连接的ID

    public int getNetworkId() {

        return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();

    }

    // 得到WifiInfo的所有信息包

    public String getWifiInfo() {

        return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();

    }

    // 添加一个网络并连接

    public void addNetwork(WifiConfiguration wcg) {

        int wcgID = mWifiManager.addNetwork(wcg);

        boolean b =  mWifiManager.enableNetwork(wcgID, true);

        Log.v("wcgID_b",wcgID+""+","+b);

    }

    // 断开指定ID的网络

    public void disconnectWifi(int netId) {

        mWifiManager.disableNetwork(netId);

        mWifiManager.disconnect();

    }

//然后是一个实际应用方法,只验证过没有密码的情况:

    public WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type){

        WifiConfiguration config = new WifiConfiguration();

        config.allowedAuthAlgorithms.clear();

        config.allowedGroupCiphers.clear();

        config.allowedKeyManagement.clear();

        config.allowedPairwiseCiphers.clear();

        config.allowedProtocols.clear();

        config.SSID = "\"" + SSID + "\"";

        WifiConfiguration tempConfig = this.IsExsits(SSID);

        if(tempConfig != null) {

            mWifiManager.removeNetwork(tempConfig.networkId);

            if(Type == 1){ //WIFICIPHER_NOPASS(1、没有密码)

                config.wepKeys[0] = "";

                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

                config.wepTxKeyIndex = 0;

            }

            if(Type == 2){ //WIFICIPHER_WEP(2、wep加密)

                config.hiddenSSID = true;

                config.wepKeys[0]= "\""+Password+"\"";

                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);

                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);

                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);

                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

                config.wepTxKeyIndex = 0;

            }

            if(Type == 3){ //WIFICIPHER_WPA(3、wpa加密)

                config.preSharedKey = "\""+Password+"\"";

                config.hiddenSSID = true;

                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);

                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

                config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);

                //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);

                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

                config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

                config.status = WifiConfiguration.Status.ENABLED;

            }

        }

        return config;

    }

    private WifiConfiguration IsExsits(String SSID){

        List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();

        if(!existingConfigs.isEmpty()){

            for (WifiConfiguration existingConfig : existingConfigs){

                if (existingConfig.SSID.equals("\""+SSID+"\"")){

                    return existingConfig;

                }

            }

        }

        return null;

    }

}

2、活动Activity中调用

(1)

/*********************Wifi管理****************************/

public WifiAdminwifiAdmin;

private StringwifiName ="";

private StringwifiPassword ="";

(2)onCreate

@Override

protected void onCreate(Bundle savedInstanceState) {

Log.v("TAG_onCreateLogin", "onCreate()...");

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_login);

initData();

connectWifi(context);//Wifi管理

}

(3)initData()

private void  initData(){

wifiAdmin =new WifiAdmin(this);

wifiAdmin.openWifi();

}

(4)

@Override

protected void onResume() {

connectWifi(context);//Wifi管理

}

(5)

private void connectWifi(){

WifiAdmin wifiAdmin = new WifiAdmin(this);

wifiAdmin.openWifi();//打开wifi

WifiConfiguration wifiConfiguration =wifiAdmin.CreateWifiInfo("jkpms","12345678",3);//配置wifi网络信息

if(wifiConfiguration !=null){

wifiAdmin.addNetwork(wifiConfiguration);//添加配置好的网络并连接

}else{

Toast.makeText(context,"未连接到指定Wifi!",Toast.LENGTH_SHORT).show();

}

}

3、优化connectWifi()

/*************************************Wifi管理**********************************/

private voidconnectWifi(Context context){

if(wifiAdmin.isWifiConnect(context)){

return;

}

wifiName="jkpms";

wifiPassword="12345678";

/*mWifiList = wifiAdmin.getScanWifiList();*/

wifiAdmin.startScan();

mWifiList=wifiAdmin.getWifiList();//未保存网络的Wifi列表(若之前存在保存的网络jkpms则列表为空但会自动连接已保存的网络)

Log.v("wifi_size",mWifiList.size()+"");

if(!mWifiList.isEmpty()){

for(inti=0;i

Log.v("wifi_Name",mWifiList.get(i).SSID);

if(mWifiList.get(i).SSID.equals(wifiName)){

findWifiFlag=true;

break;

}

}

if(findWifiFlag==false){

Toast.makeText(context,"未找到指定Wifi:"+wifiName,Toast.LENGTH_SHORT).show();

}else{

WifiConfiguration wifiConfiguration =wifiAdmin.CreateWifiInfo(wifiName,wifiPassword,3);//配置指定ssid的wifi热点网络信息

if(wifiConfiguration !=null){

wifiAdmin.addNetwork(wifiConfiguration);//添加配置好的网络并连接

}

//            try {

//                Thread.currentThread().sleep(3000);//阻断3秒

//            } catch (InterruptedException e) {

//                e.printStackTrace();

//            }

//            if(!wifiAdmin.isWifiConnect(context)){

//                Toast.makeText(context,"当前指定Wifi:" + wifiName + "密码错误!", Toast.LENGTH_SHORT).show();

//            }

handler.postDelayed(mRunnable,10000);// 在Handler中执行子线程并延迟10s

}

}

}

privateRunnablemRunnable=newRunnable() {

@Override

public voidrun() {

handler.sendEmptyMessage(WIFI_CONNECT_DELAYED);

}

};

public  static final intWIFI_CONNECT_DELAYED=6;

finalHandlerhandler=newHandler() {

public voidhandleMessage(Message message) {

switch(message.what) {

caseWIFI_CONNECT_DELAYED://10s后执行代码

if(!wifiAdmin.isWifiConnect(context)){

Toast.makeText(context,"当前指定Wifi:"+wifiName+"密码错误!",Toast.LENGTH_SHORT).show();

}

break;

default:

break;

}

super.handleMessage(message);

}

};

3、配置文件manifest

//Wifi控制权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

相关文章

网友评论

    本文标题:Wifi自动打开并连接(success)

    本文链接:https://www.haomeiwen.com/subject/qjeirxtx.html