wifi 简单实习

来源:互联网 发布:管家婆无法连接数据库 编辑:程序博客网 时间:2024/06/06 01:15

  期间有个问题,幸好有大神相助,网上代码看的头痛,直接上代码




    private ArrayList<ScanResult> mList;    private ListViewAdapter mAdapter;    private WifiManager mWm;    @Override    protected void setListView(ListView listView) {        initData();        mAdapter = new ListViewAdapter(mList) {    //这里我把BaseAdapter给封装了一下  只需要重写getView方法            @Override            protected View getListView(final int position, View convertView, ViewGroup parent) {                TextView tv;                if (convertView == null) {                    tv = new TextView(WifiActivity.this);                    convertView = tv;                }                TextView textView = (TextView) convertView;                if (mList.size() > position) {                    textView.setText(mList.get(position).SSID);                    textView.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            ScanResult scanResult = mList.get(position);   //获取wifi的信息                            inputPassword(scanResult);             //弹出对话框                        }                    });                }                return convertView;            }        };        listView.setAdapter(mAdapter);    }    //WIFI    private void initData() {        //管理wifi 获得wifi服务        if (mWm == null)            mWm = (WifiManager) getSystemService(Context.WIFI_SERVICE);        if (!mWm.isWifiEnabled())            mWm.setWifiEnabled(true);    //wifi开启        //管理网络  获得网络服务        ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);        //网络信息获取        NetworkInfo nif = cm.getNetworkInfo(ConnectivityManager.                TYPE_WIFI); //网络连接        DhcpInfo dhcpInfo = mWm.getDhcpInfo();        WifiInfo wifiInfo = mWm.getConnectionInfo();        String ssid = wifiInfo.getSSID();        List<WifiConfiguration> configuredNetworks = mWm.getConfiguredNetworks();        //mWm.startScan();  //wifi扫描        mList = (ArrayList<ScanResult>) mWm.getScanResults(); //获取附近的wifi        refresh();    }    private void refresh() {    //这里进行刷新wifi列表        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                mList = (ArrayList<ScanResult>) mWm.getScanResults(); //获取附近的wifi                mAdapter.notifyDataSetChanged();                refresh();            }        }, 500);    }    private void inputPassword(final ScanResult bean) {        AlertDialog.Builder builder = new AlertDialog.Builder(this);        final View view1 = View.inflate(this, R.layout.view_password, null);        builder.setView(view1);        builder.setTitle(bean.SSID);        builder.setMessage("请输入WIFI密码:");        builder.setPositiveButton("连接", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                EditText evPsw = (EditText) view1.findViewById(R.id.view_password);                String psw = evPsw.getText().toString().trim();                if (TextUtils.isEmpty(psw)) {                    Toast.makeText(WifiActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();                } else {                    Toast.makeText(WifiActivity.this, "正在尝试连接,请稍候...", Toast.LENGTH_SHORT).show();                    WifiManager mWm = (WifiManager) getSystemService(Context.WIFI_SERVICE);                    WifiConfiguration wcg = WifiUtils.CreateWifiInfo(WifiActivity.this, bean.SSID,                            psw, WifiUtils.getEncrypt(bean.capabilities));                         int wcgID = mWm.addNetwork(wcg);         //添加网络                    boolean b = mWm.enableNetwork(wcgID, true);  //使用网络  中间没有添加这两行代码作死连不上                }            }        });        builder.setNegativeButton("取消", null);        builder.show();    }    //int 地址装换成32 位值    public String FormatString(int value) {        String strValue = "";        byte[] ary = intToByteArray(value);        for (int i = ary.length - 1; i >= 0; i--) {            strValue += (ary[i] & 0xFF);            if (i > 0) {                strValue += ".";            }        }        return strValue;    }    public byte[] intToByteArray(int value) {        byte[] b = new byte[4];        for (int i = 0; i < 4; i++) {            int offset = (b.length - 1 - i) * 8;            b[i] = (byte) ((value >>> offset) & 0xFF);        }        return b;    }   }



//下面是个工具类


package com.jingsheng.jingsheng.utlis;import android.content.Context;import android.net.DhcpInfo;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.text.TextUtils;import java.net.Inet4Address;import java.util.List;/** * Created by JarryLeo on 2017/2/17. */public class WifiUtils {
    private ArrayList<ScanResult> mList;    private ListViewAdapter mAdapter;    private WifiManager mWm;    @Override    protected void setListView(ListView listView) {        initData();        mAdapter = new ListViewAdapter(mList) {    //这里我把BaseAdapter给封装了一下  只需要重写getView方法            @Override            protected View getListView(final int position, View convertView, ViewGroup parent) {                TextView tv;                if (convertView == null) {                    tv = new TextView(WifiActivity.this);                    convertView = tv;                }                TextView textView = (TextView) convertView;                if (mList.size() > position) {                    textView.setText(mList.get(position).SSID);                    textView.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            ScanResult scanResult = mList.get(position);   //获取wifi的信息                            inputPassword(scanResult);             //弹出对话框                        }                    });                }                return convertView;            }        };        listView.setAdapter(mAdapter);    }    //WIFI    private void initData() {        //管理wifi 获得wifi服务        if (mWm == null)            mWm = (WifiManager) getSystemService(Context.WIFI_SERVICE);        if (!mWm.isWifiEnabled())            mWm.setWifiEnabled(true);    //wifi开启        //管理网络  获得网络服务        ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);        //网络信息获取        NetworkInfo nif = cm.getNetworkInfo(ConnectivityManager.                TYPE_WIFI); //网络连接        DhcpInfo dhcpInfo = mWm.getDhcpInfo();        WifiInfo wifiInfo = mWm.getConnectionInfo();        String ssid = wifiInfo.getSSID();        List<WifiConfiguration> configuredNetworks = mWm.getConfiguredNetworks();        //mWm.startScan();  //wifi扫描        mList = (ArrayList<ScanResult>) mWm.getScanResults(); //获取附近的wifi        refresh();    }    private void refresh() {    //这里进行刷新wifi列表        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                mList = (ArrayList<ScanResult>) mWm.getScanResults(); //获取附近的wifi                mAdapter.notifyDataSetChanged();                refresh();            }        }, 500);    }    private void inputPassword(final ScanResult bean) {        AlertDialog.Builder builder = new AlertDialog.Builder(this);        final View view1 = View.inflate(this, R.layout.view_password, null);        builder.setView(view1);        builder.setTitle(bean.SSID);        builder.setMessage("请输入WIFI密码:");        builder.setPositiveButton("连接", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                EditText evPsw = (EditText) view1.findViewById(R.id.view_password);                String psw = evPsw.getText().toString().trim();                if (TextUtils.isEmpty(psw)) {                    Toast.makeText(WifiActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();                } else {                    Toast.makeText(WifiActivity.this, "正在尝试连接,请稍候...", Toast.LENGTH_SHORT).show();                    WifiManager mWm = (WifiManager) getSystemService(Context.WIFI_SERVICE);                    WifiConfiguration wcg = WifiUtils.CreateWifiInfo(WifiActivity.this, bean.SSID,                            psw, WifiUtils.getEncrypt(bean.capabilities));                         int wcgID = mWm.addNetwork(wcg);         //添加网络                    boolean b = mWm.enableNetwork(wcgID, true);  //使用网络  中间没有添加这两行代码作死连不上                }            }        });        builder.setNegativeButton("取消", null);        builder.show();    }    //int 地址装换成32 位值    public String FormatString(int value) {        String strValue = "";        byte[] ary = intToByteArray(value);        for (int i = ary.length - 1; i >= 0; i--) {            strValue += (ary[i] & 0xFF);            if (i > 0) {                strValue += ".";            }        }        return strValue;    }    public byte[] intToByteArray(int value) {        byte[] b = new byte[4];        for (int i = 0; i < 4; i++) {            int offset = (b.length - 1 - i) * 8;            b[i] = (byte) ((value >>> offset) & 0xFF);        }        return b;    }   }

package com.jingsheng.jingsheng.utlis;import android.content.Context;import android.net.DhcpInfo;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.text.TextUtils;import java.net.Inet4Address;import java.util.List;/** * Created by JarryLeo on 2017/2/17. */public class WifiUtils {       //验证密码    public static WifiConfiguration CreateWifiInfo(Context context, String SSID, String Password, int Type) {        WifiManager mWm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);        WifiConfiguration config = new WifiConfiguration();        config.allowedAuthAlgorithms.clear();        config.allowedGroupCiphers.clear();        config.allowedKeyManagement.clear();        config.allowedPairwiseCiphers.clear();        config.allowedProtocols.clear();        config.SSID = "\"" + SSID + "\"";        WifiConfiguration tempConfig = IsExsits(context, SSID);        if (tempConfig != null) {            mWm.removeNetwork(tempConfig.networkId);        }        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] = "\"" + 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        {            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 static WifiConfiguration IsExsits(Context context, String SSID) {        WifiManager mWm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);        List<WifiConfiguration> existingConfigs = mWm.getConfiguredNetworks();        for (WifiConfiguration existingConfig : existingConfigs) {            if (existingConfig.SSID.equals("/" + SSID + " / ")) {                return existingConfig;            }        }        return null;    }    /**     * intip地址转字符串     *     * @param ip     * @return     */    public static String ipIntToString(int ip) {        try {            byte[] bytes = new byte[4];            bytes[0] = (byte) (0xff & ip);            bytes[1] = (byte) ((0xff00 & ip) >> 8);            bytes[2] = (byte) ((0xff0000 & ip) >> 16);            bytes[3] = (byte) ((0xff000000 & ip) >> 24);            return Inet4Address.getByAddress(bytes).getHostAddress();        } catch (Exception e) {            return "";        }    }    public static String getInfoString(WifiManager wm) {        WifiInfo wifiInfo = wm.getConnectionInfo();        DhcpInfo dhcpInfo = wm.getDhcpInfo();        StringBuilder sb = new StringBuilder();        sb.append("IP地址:" + ipIntToString(wifiInfo.getIpAddress()) + "\n");        sb.append("网关:" + ipIntToString(dhcpInfo.gateway) + "\n");        sb.append("网络ID" + wifiInfo.getNetworkId() + "\n");        sb.append("网络名字:" + wifiInfo.getSSID() + "\n");        sb.append("网络的信号:" + wifiInfo.getRssi() + "\n");        sb.append("网络连接的速度:" + wifiInfo.getLinkSpeed() + "\n");        //sb.append("客户端状态的信息:" + wifiInfo.getSupplicantState() + "\n");        return sb.toString();    }    public static int getEncrypt(String capabilities) {        if (!TextUtils.isEmpty(capabilities)) {            if (capabilities.contains("WPA") || capabilities.contains("wpa")) {                return 3;            } else if (capabilities.contains("WEP") || capabilities.contains("wep")) {                return 2;            } else {                //无密码类型                return 1;            }        }        return 0;    }}
public static WifiConfiguration CreateWifiInfo(Context context, String SSID, String Password, int Type) { WifiManager mWm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; WifiConfiguration tempConfig = IsExsits(context, SSID); if (tempConfig != null) { mWm.removeNetwork(tempConfig.networkId); } 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] = "\"" + 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 { 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 static WifiConfiguration IsExsits(Context context, String SSID) { WifiManager mWm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); List<WifiConfiguration> existingConfigs = mWm.getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("/" + SSID + " / ")) { return existingConfig; } } return null; } /** * intip地址转字符串 * * @param ip * @return */ public static String ipIntToString(int ip) { try { byte[] bytes = new byte[4]; bytes[0] = (byte) (0xff & ip); bytes[1] = (byte) ((0xff00 & ip) >> 8); bytes[2] = (byte) ((0xff0000 & ip) >> 16); bytes[3] = (byte) ((0xff000000 & ip) >> 24); return Inet4Address.getByAddress(bytes).getHostAddress(); } catch (Exception e) { return ""; } } public static String getInfoString(WifiManager wm) { WifiInfo wifiInfo = wm.getConnectionInfo(); DhcpInfo dhcpInfo = wm.getDhcpInfo(); StringBuilder sb = new StringBuilder(); sb.append("IP地址:" + ipIntToString(wifiInfo.getIpAddress()) + "\n"); sb.append("网关:" + ipIntToString(dhcpInfo.gateway) + "\n"); sb.append("网络ID" + wifiInfo.getNetworkId() + "\n"); sb.append("网络名字:" + wifiInfo.getSSID() + "\n"); sb.append("网络的信号:" + wifiInfo.getRssi() + "\n"); sb.append("网络连接的速度:" + wifiInfo.getLinkSpeed() + "\n"); //sb.append("客户端状态的信息:" + wifiInfo.getSupplicantState() + "\n"); return sb.toString(); }//获取wifi密码的加密类型 public static int getEncrypt(String capabilities) { if (!TextUtils.isEmpty(capabilities)) { if (capabilities.contains("WPA") || capabilities.contains("wpa")) { return 3; } else if (capabilities.contains("WEP") || capabilities.contains("wep")) { return 2; } else { //无密码类型 return 1; } } return 0; }}


更多wifi资料,网上搜一搜吧!


   //对了,不要忘了添加权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
有些的要加上 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

原创粉丝点击