码迷,mamicode.com
首页 > 其他好文 > 详细

操作Wifi的工具类

时间:2014-09-21 23:26:11      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:des   android   style   blog   color   io   os   java   ar   

有时候需要打开关闭wifi,或者是坚持状态什么的,这里我写了个工具类来完成各种操作,今后还会添加其他的功能。比如链接某个加密/不加密的wifi

WifiAdmin.java

package com.kale.socketactivity;

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> listResult;
    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();
            //将扫描结果存入数据列中
            listResult = mWifiManager.getScanResults();
            if (listResult != null) {
                Log.i(TAG, "有wifi");
                return true;
            } else {
                Log.i(TAG, "当前区域没有无线网络");
                return false;
            }
        }
        else {
            return false;
        }
        
    }

    /**
     * 得到附近wifi的扫描结果,是ScanResult对象
     * 得到的是附近网络的结果集,没有就返回null
     */
    public ArrayList<ScanResult> getScanResult() {
        // 每次点击扫描之前清空上一次的扫描结果
        if (mStringBuffer != null) {
            mStringBuffer = new StringBuffer();
        }
        // 开始扫描网络
        scan();
        listResult = mWifiManager.getScanResults();
        ArrayList<ScanResult> scanResultsList = new ArrayList<ScanResult>();
        if (listResult != null) {
            for (int i = 0; i < listResult.size(); i++) {
                mScanResult = listResult.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;
        }
    }
    
    /**
     * 得到指定网络的index(从0开始计数),找不到就返回-1
     */
    public int getUniqueId(String netName){
        // 开始扫描网络
        scan();
        listResult = mWifiManager.getScanResults();
        if (listResult != null) {
            for (int i = 0; i < listResult.size(); i++) {
                mScanResult = listResult.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 String getCurrentWifiInfo() {
        return (mWifiInfo == null) ? null : mWifiInfo.toString();
    }

    // 锁定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 connectConfiguration(int index) {
        // 索引大于配置好的网络索引返回
        if (index >= mWifiConfigList.size()) {
            return false;
        }
        // 连接配置好的指定ID的网络
        return mWifiManager.enableNetwork(mWifiConfigList.get(index).networkId,true);
    }

    
}

 

测试代码

package com.kale.socketactivity;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

import android.net.wifi.ScanResult;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WifiAdmin wifi = new WifiAdmin(this);

        //wifi.closeNetCard();
        //wifi.openNetCard();
        /*switch (wifi.getNetCardState()) {
        case WifiAdmin.IS_CLOSED:
            System.out.println(WifiAdmin.IS_CLOSED);
            break;
        case WifiAdmin.IS_CLOSING:
            System.out.println(WifiAdmin.IS_CLOSING);
            break;
        case WifiAdmin.IS_OPENED:
            System.out.println(WifiAdmin.IS_OPENED);
            break;
        case WifiAdmin.IS_OPENING:
            System.out.println(WifiAdmin.IS_OPENING);
            break;
        default:
            break;
        }*/
        //wifi.scan();
        //wifi.getScanResult();
        /*List<ScanResult> list = wifi.getScanResult();
        for (int i = 0; i < list.size(); i++) {
            System.out.println("No = "+ i);
            System.out.println("BSSID = "+ list.get(i).BSSID);
            System.out.println("capabilities = " + list.get(i).capabilities);
            System.out.println("frequency = " + list.get(i).frequency);
            System.out.println("level = " + list.get(i).level);
            System.out.println("SSID = " + list.get(i).SSID);
            System.out.println("timestamp = " + list.get(i).timestamp);
            
        }*/
        
        //System.out.println("你选择的网络的index为"+wifi.getUniqueId("CMCC-EDU"));
        //wifi.disconnectWifi();
        //wifi.getWifiConnectState();
/*        System.out.println("当前网络的BSSID = "+wifi.getCurrentBSSID() + "\n"
                +"Ip = "+wifi.getCurrentIPAddress() + "\n"
        +"Mac = "+wifi.getCurrentMacAddress() + "\n"
        +"id = "+wifi.getCurrentNetworkId() + "\n"
        +"ssid = "+wifi.getCurrentSSID() + "\n"
        +"wifiInfo = "+wifi.getCurrentWifiInfo());*/
        
    }

    
}

 

操作Wifi的工具类

标签:des   android   style   blog   color   io   os   java   ar   

原文地址:http://www.cnblogs.com/tianzhijiexian/p/3985037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!