wifi热点核心流程

来源:互联网 发布:linux驱动开发培训 编辑:程序博客网 时间:2024/05/18 12:03

wifi热点核心流程


  首先配置wifi热点:网络SSID(wifi热点的名字)、安全性(三种方式:OPEN、WPA PSK和WPA2 PSK)与密码

     private WifiConfiguration mWifiConfig = null;

     mWifiConfig = mWifiManager.getWifiApConfiguration();

     public WifiConfiguration getConfig() {

   WifiConfiguration config = new WifiConfiguration();

        /**
         * TODO: SSID in WifiConfiguration for soft ap
         * is being stored as a raw string without quotes.
         * This is not the case on the client side. We need to
         * make things consistent and clean it up
         */
      config.SSID = mSsid.getText().toString();

     switch (mSecurityTypeIndex) {

        case OPEN_INDEX:
          config.allowedKeyManagement.set(KeyMgmt.NONE);

          return config;

        case WPA_INDEX:
          config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
          config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
            if (mPassword.length() != 0) {
              String password = mPassword.getText().toString();
              config.preSharedKey = password;
            }
            return config;

case WPA2_INDEX:

           config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
           config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
           if (mPassword.length() != 0) {
            String password = mPassword.getText().toString();
            config.preSharedKey = password;
           }
            return config;
      }
        return null;
      }

wifi热点生效的前提必须要调用frameworks中的WifiManager类中的setWifiApEnabled方法,该方法接着调用frameworks层服务的WifiService.java类的setWifiApEnabled(wifiConfig, enabled),具体方法内容在下面。


      mWifiConfig = getConfig();
if (mWifiConfig != null) {
/**
* if soft AP is stopped, bring up
* else restart with new config
* TODO: update config on a running access point when framework support is            * added
*/
                if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED) {
mWifiManager.setWifiApEnabled(null, false);
mWifiManager.setWifiApEnabled(mWifiConfig, true);

     } else {
            mWifiManager.setWifiApConfiguration(mWifiConfig);
     }

}


WifiService.java类的setWifiApEnabled方法:

public void setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
        enforceChangePermission();
        // null wifiConfig is a meaningful input for CMD_SET_AP
        if (wifiConfig == null || wifiConfig.isValid()) {
            mWifiController.obtainMessage(CMD_SET_AP, enabled ? 1 : 0, 0,            wifiConfig).sendToTarget();
        } else {
            Slog.e(TAG, "Invalid WifiConfiguration");
        }
        if(enabled)
        {
            SystemProperties.set("persist.wifiAP.state", "true");
        }
                else
        {
            SystemProperties.set("persist.wifiAP.state", "false");
        }
            SystemProperties.getBoolean("persist.wifiAP.state", false);
    }
0 0