WiFi管理工具类

package com.wyf.app.common;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.List;import android.content.Context;import android.net.DhcpInfo;import android.net.wifi.ScanResult;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;public class WifiManageUtils{    private static WifiManager wifiManager;    private static WifiInfo wifiInfo;    private static List<ScanResult> wifiScanlist;    private static List<WifiConfiguration> wifiConfigurationlist;    private static DhcpInfo wifiDhcpInfo;    public WifiManageUtils(Context context)    {    // 取得WifiManager对象    wifiManager = (WifiManager) context        .getSystemService(Context.WIFI_SERVICE);    }    public WifiInfo getWifiConnectInfo()    {    wifiInfo = wifiManager.getConnectionInfo();    return wifiInfo;    }    public List<ScanResult> getScanResult()    {    wifiScanlist = wifiManager.getScanResults();    return wifiScanlist;    }    public List<WifiConfiguration> getConfiguration()    {    wifiConfigurationlist = wifiManager.getConfiguredNetworks();    return wifiConfigurationlist;    }    public DhcpInfo getDhcpInfo()    {    wifiDhcpInfo = wifiManager.getDhcpInfo();    return wifiDhcpInfo;    }    /**     * 开启热点作为服务端的配置     *      * @param ssid     * @param passwd     * @param type     * @return     */    public WifiConfiguration getCustomeWifiConfiguration(String ssid,        String passwd, int type)    {    WifiConfiguration config = new WifiConfiguration();    config.allowedAuthAlgorithms.clear();    config.allowedGroupCiphers.clear();    config.allowedKeyManagement.clear();    config.allowedPairwiseCiphers.clear();    config.allowedProtocols.clear();    config.SSID = ssid;    if (type == 1) // NOPASS    {        config.wepKeys[0] = "";        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);        config.wepTxKeyIndex = 0;    }    if (type == 2) // WEP    {        config.hiddenSSID = true;        config.wepKeys[0] = passwd;        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) // WPA    {        config.preSharedKey = passwd;        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;    }    if (type == 4) // WPA2psk test    {        config.preSharedKey = passwd;        config.hiddenSSID = true;        config.status = WifiConfiguration.Status.ENABLED;        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);        config.allowedPairwiseCiphers            .set(WifiConfiguration.PairwiseCipher.TKIP);        config.allowedPairwiseCiphers            .set(WifiConfiguration.PairwiseCipher.CCMP);        config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);    }    return config;    }    /**     * 客户端添加配置,作为连接认证配置     * ssid、passwd 配置前后必须加上双引号“     * @param ssid     * @param passwd     * @param type     * @return     */    public WifiConfiguration getCustomeWifiClientConfiguration(String ssid,        String passwd, int type)    {    WifiConfiguration config = new WifiConfiguration();    config.allowedAuthAlgorithms.clear();    config.allowedGroupCiphers.clear();    config.allowedKeyManagement.clear();    config.allowedPairwiseCiphers.clear();    config.allowedProtocols.clear();    //双引号必须    config.SSID = "\"" + ssid + "\"";    if (type == 1) // WIFICIPHER_NOPASS    {        config.wepKeys[0] = "";        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);        config.wepTxKeyIndex = 0;    }    if (type == 2) // WIFICIPHER_WEP    {        config.hiddenSSID = true;         config.wepKeys[0] = "\"" + passwd + "\"";        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    {        config.preSharedKey = "\"" + passwd + "\"";        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;    }    if (type == 4) // WPA2psk test    {        config.preSharedKey = "\"" + passwd + "\"";        config.hiddenSSID = true;        config.status = WifiConfiguration.Status.ENABLED;        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);        config.allowedPairwiseCiphers            .set(WifiConfiguration.PairwiseCipher.TKIP);        config.allowedPairwiseCiphers            .set(WifiConfiguration.PairwiseCipher.CCMP);        config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);    }    return config;    }    public Boolean stratWifiAp(String ssid, String psd, int type)    {    Method method1 = null;    try    {        method1 = wifiManager.getClass().getMethod("setWifiApEnabled",            WifiConfiguration.class, boolean.class);        WifiConfiguration netConfig = getCustomeWifiConfiguration(ssid,            psd, type);        method1.invoke(wifiManager, netConfig, true);        return true;    }    catch (Exception e)    {        e.printStackTrace();        return false;    }    }    public void closeWifiAp()    {    if (isWifiApEnabled())    {        try        {        Method method = wifiManager.getClass().getMethod(            "getWifiApConfiguration");        method.setAccessible(true);        WifiConfiguration config = (WifiConfiguration) method            .invoke(wifiManager);        Method method2 = wifiManager.getClass().getMethod(            "setWifiApEnabled", WifiConfiguration.class,            boolean.class);        method2.invoke(wifiManager, config, false);        }        catch (NoSuchMethodException e)        {        e.printStackTrace();        }        catch (IllegalArgumentException e)        {        e.printStackTrace();        }        catch (IllegalAccessException e)        {        e.printStackTrace();        }        catch (InvocationTargetException e)        {        e.printStackTrace();        }    }    }    public boolean isWifiApEnabled()    {    try    {        Method method = wifiManager.getClass().getMethod("isWifiApEnabled");        method.setAccessible(true);        return (Boolean) method.invoke(wifiManager);    }    catch (NoSuchMethodException e)    {        e.printStackTrace();    }    catch (Exception e)    {        e.printStackTrace();    }    return false;    }}

开启热点服务端部分代码

    public void startWifiHot()    {    btnServer.setEnabled(false);    if (wifiManager.isWifiEnabled())    {        wifiManager.setWifiEnabled(false);    }    Boolean b = wifimanageutils.stratWifiAp(mSSID, mPasswd,3);    if (b)    {        serverThread = new WifiServerThread(context, testh);        Toast.makeText(context, "server 端启动", 3000).show();        serverThread.start();    }    else    {        btnServer.setEnabled(true);        Toast.makeText(context, "server 端失败,请重试", 3000).show();    }    }

WifiServerThread服务端线程

public class WifiServerThread extends Thread{    public ServerSocket mserverSocket;    public Socket socket;    public Context context;    public static final int SERVERPORT = 8191;    public Boolean isrun = true;    public Handler handler;    public WifiServerThread(Context context, Handler handler)    {    this.context = context;    this.handler = handler;    }    public void run()    {    try    {        mserverSocket = new ServerSocket(SERVERPORT);        while (isrun)        {        socket = mserverSocket.accept();        new Thread(new Runnable()        {            @Override            public void run()            {            byte[] buffer = new byte[1024];            int bytes;            InputStream mmInStream = null;            try            {                mmInStream = socket.getInputStream();            }            catch (IOException e1)            {                e1.printStackTrace();            }            System.out.println("server");            try            {                InputStream in = socket.getInputStream();                OutputStream os = socket.getOutputStream();                byte[] data = new byte[1024];                while (in.available() <= 0)                ;// 同步                int len = in.read(data);                String[] str = new String(data, 0, len, "utf-8")                    .split(";");                String path = Environment                    .getExternalStorageDirectory()                    .getAbsolutePath()                    + "/CHFS/000000000000" + "/";                if (len != -1)                {                path += "socket_" + str[0];// str[0]是文件名加类型                }                handler.obtainMessage(10, (Object) str[0])                    .sendToTarget();                System.out.println(path);                os.write("start".getBytes());                os.flush();                File file = new File(path);                DataOutputStream out = new DataOutputStream(                    new FileOutputStream(file));                System.out.println("开始接收.....");                int countSize = 0;                while ((len = in.read(data)) != -1)                {                out.write(data, 0, len);                countSize += len;                }                os.close();                out.flush();                out.close();                in.close();            }            catch (IOException e)            {                e.printStackTrace();            }            finally            {                try                {                socket.close();                System.out.println("关闭....");                }                catch (Exception e)                {                e.printStackTrace();                }                handler.obtainMessage(10, (Object) "接受 完成")                    .sendToTarget();            }            }        }).start();        }        if (mserverSocket != null)        {        try        {            mserverSocket.close();        }        catch (IOException e)        {            e.printStackTrace();        }        }    }    catch (Exception e)    {        e.printStackTrace();    }    }}

开启客户端部分代码

btnClient.setOnClickListener(new OnClickListener()    {        @Override        public void onClick(View v)        {        WifiConfiguration netConfig = wifimanageutils            .getCustomeWifiClientConfiguration(mSSID, mPasswd,3);        int wcgID = wifiManager.addNetwork(netConfig);        boolean b = wifiManager.enableNetwork(wcgID, true);                Boolean iptoready = false;        if (!b)        {            Toast.makeText(context, "wifi 连接配置不可用", 3000).show();            return;        }        while (!iptoready)        {            try            {            // 为了避免程序一直while循环,让它睡个100毫秒在检测……            Thread.currentThread();            Thread.sleep(100);            }            catch (InterruptedException ie)            {            }            DhcpInfo dhcp = new WifiManageUtils(context).getDhcpInfo();            int ipInt = dhcp.gateway;            if (ipInt != 0)            {            iptoready = true;            }        }        wifiLock.acquire();        clientThread = new WifiClientThread(context);        clientThread.start();        }    });

WifiClientThread客户端线程

public class WifiClientThread extends Thread{    public Socket socket;    public Context context;    public Boolean isrun = true;    public static final int SERVERPORT = 8191;    public OutputStream os;    public InputStream in;    public WifiClientThread(Context context)    {    this.context = context;    }    public void run()    {    try    {        DhcpInfo dhcp = new WifiManageUtils(context).getDhcpInfo();        int ipInt = dhcp.gateway;        String serverip = String.valueOf(new StringBuilder()            .append((ipInt & 0xff)).append('.').append((ipInt >> 8) & 0xff)            .append('.').append((ipInt >> 16) & 0xff).append('.')            .append(((ipInt >> 24) & 0xff)).toString()        );        socket = new Socket(serverip, SERVERPORT);        new Thread(new Runnable()        {        @Override        public void run()        {            if (socket == null)            {            return;            }            System.out.println("client connect");            try            {            String path = Environment.getExternalStorageDirectory()                .getAbsolutePath() + "/CHFS/000000000000";            if (android.os.Build.MODEL.contains("8812"))            {                path += "/camera/" + "camera_temp_name.jpg";            }            else            {//                path += "/camera/" + "camera_temp_name.mp4";                 path+="/ARChon-v1.1-x86_64.zip";            }            DataInputStream read = new DataInputStream(                new FileInputStream(new File(path)));            System.out.println(read.available());            String fileName = path.substring(path.lastIndexOf("/") + 1);// 获得文件名加类型            System.out.println(fileName);            os = socket.getOutputStream();            in = socket.getInputStream();            os.write((fileName + ";" + read.available())                .getBytes("utf-8"));// 将文件名和文件大小传给接收端            os.flush();            byte[] data = new byte[1024];            int len = in.read(data);            String start = new String(data, 0, len);            int sendCountLen = 0;            if (start.equals("start"))            {                while ((len = read.read(data)) != -1)                {                os.write(data, 0, len);                sendCountLen += len;                }                os.flush();                os.close();                read.close();            }            }            catch (Exception e)            {            e.printStackTrace();            }            finally            {            try            {                socket.close();            }            catch (IOException e)            {                e.printStackTrace();            }            }        }        }).start();    }    catch (IOException e)    // catch (Exception e)    {        e.printStackTrace();    }    }}

更多相关文章

  1. android mina 客户端无法接收信息的原因
  2. android之纵横屏幕切换时保存数据
  3. Android腾讯微薄客户端开发十四:首页menu菜单
  4. Android(安卓)Socket编程
  5. Android客户端自动更新代码
  6. android 客户端 smtp 协议发送数据
  7. Android(安卓)MTP之服务端UsbService启动
  8. 开源中国WP7客户端全面开源,包括iPhone客户端与Android
  9. Android使用的MQTT客户端

随机推荐

  1. android为按钮添加事件的三种方法
  2. Android事件分发机制解析
  3. 创建第一个Android程序HelloWord
  4. android面试题汇总(一)
  5. Android(安卓)Dev Tools官网地址:http://w
  6. 2015年Android开发新技术小结
  7. 在Android下有类似于session的东西,叫做Ap
  8. Android Studio的安装步骤及设置.
  9. Android(安卓)ViewDragHelper使用介绍
  10. Andriod使用Intent实现拨号