您的位置:首页 > 移动开发 > Android开发

android WIFI开发

2015-10-13 22:43 441 查看
android wifi开发:

wifi技术是一种无线联网技术,通常使用无线路由器制造一个wifi热点,我们的终端设备就可以打开wifi进行互联,那么在android手机上是如何实现与无线路由器的热点互联的呢?

android wifi开发的api都在android.net.wifi包下面,它下面主要包括以下几个类:

[code]1. ScanResult   打开wifi扫描到的无线网络接入点,包括接入点名称、身份验证、频率、信号强度

2. WifiConfiguration  wifi网络的配置参数,主要包括ssid networkid presharedkey等信息

3. WifiInfo  这个代表无线连接描述,一般用于我们已经连好的wifi,通过它可以获取接入点名称、IP地址、mac地址、网络id等

4. 重要的是这个类  WifiManager管理wifi的类,在他里面有一些重要的方法
    打开网卡:
        先判断isWifiEnabled()    在打开setWifiEnabled(boolean enabled) 

    连接wifi:
        (如果没有保存,就先addNetwork(WifiConfiguration config) )   
        再enableNetwork(int netId, boolean disableOthers)    第二个参数看名字就知道了

    关闭wifi:
        disableNetwork(int netId) 
        disconnect() 

    获取wifi状态:
        getWifiState() 
        返回值  One of WIFI_STATE_DISABLED,
                WIFI_STATE_DISABLING, WIFI_STATE_ENABLED,
                 WIFI_STATE_ENABLING, WIFI_STATE_UNKNOWN


下面以一个用手机创建wifi热点和连接wifi热点为例:

创建wifi热点:

利用java反射机制,获取WifiManager掩藏的setWifiApEnabled进行创建热点

[code]    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wConfiguration = new WifiConfiguration();
        wManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
        wConfiguration.SSID = "my_wifi_1";
        wConfiguration.preSharedKey = "123456789";

        btn = (Button)this.findViewById(R.id.wifi);
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                flag = !flag;

                //热点不能和wifi同时开启  如果wifi开启就关闭掉
                if(wManager.isWifiEnabled()){
                    wManager.setWifiEnabled(false);
                }

                try {
                    Method method = wManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
                    method.invoke(wManager, wConfiguration, flag);
                } catch (NoSuchMethodException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

    连接wifi热点:
        连接wifi也很简单,只需要设置WifiConfiguration的参数,在把它加入到network里面去,enablewifi功能即可
        //连接wifi  参数比较多  麻烦
    public WifiConfiguration setWifiParams(){
        WifiConfiguration mWifiConfiguration = new WifiConfiguration();

        mWifiConfiguration.SSID = "\"" + ssid + "\"";
        mWifiConfiguration.preSharedKey = "\"" + password + "\"";
        mWifiConfiguration.hiddenSSID = true;           //不再广播此ssid
        mWifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);  
        mWifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);  
        mWifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);  
        mWifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);  
        mWifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);  
        mWifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);    

        return mWifiConfiguration;
    }


[code]    返回的wificonfiguration使用addnetwork,enableNetwork(int netId, boolean disableOthers)即可打开
还有一种比较省力的方法,直接跳跳转到用户设置wifi界面,用户手动设置:


[code]startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: