【问题标题】:AOSP - Adding Default Wifi SSIDAOSP - 添加默认 Wifi SSID
【发布时间】:2014-03-09 10:30:09
【问题描述】:

我正在构建我的 AOSP(Android 开源项目)分支。

我正在尝试弄清楚如何将 Wifi 配置添加到构建中。 因此,一旦我闪到已经设置了 SSID/WEP 密钥的设备上。

我在这里查看了默认配置:

/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 
/frameworks/base/core/res/res/values/config.xml

但我找不到任何与 Wifi SSID/Key 相关的内容。

【问题讨论】:

  • wifi 配置转换为/data/misc/wifi/wpa_supplicant.conf 中的条目。当我弄清楚如何正确预加载该文件时,我会在这里发布答案。

标签: android android-source


【解决方案1】:

从未找到直接包含 Wifi 配置的方法,但我创建了一个单独的应用程序调用

public void saveWepConfig(String SSID, String Password, boolean Hidden)
    {
        WifiConfiguration wfc = new WifiConfiguration();

        wfc.SSID = "\"".concat(SSID).concat("\"");
        wfc.status = WifiConfiguration.Status.DISABLED;
        wfc.priority = 40;
        wfc.hiddenSSID = Hidden;

        wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);

        if (isHexWepKey(Password)) wfc.wepKeys[0] = Password;
        else wfc.wepKeys[0] = "\"".concat(Password).concat("\"");
        wfc.wepTxKeyIndex = 0;

        WifiManager wfMgr = (WifiManager) _context.getSystemService(Context.WIFI_SERVICE);
        int networkId = wfMgr.addNetwork(wfc);
        if (networkId != -1) {
         // success, can call wfMgr.enableNetwork(networkId, true) to connect
            wfMgr.enableNetwork(networkId, true);
        }

    }

    private boolean isHexWepKey(String s) {
        if (s == null) {
            return false;
        }

        int len = s.length();
        if (len != 10 && len != 26 && len != 58) {
            return false;
        }

        for (int i = 0; i < len; ++i) {
            char c = s.charAt(i);
            if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
                continue;
            }
            return false;
        }
        return true;
    }

【讨论】:

    【解决方案2】:

    仅供参考。如果您正在制作 AOSP 映像并想要添加预安装的接入点。 搜索 wpa_supplicant-overlay.conf 文件(通常在 /data/misc/wifi/ 下)并在那里添加网络信息。然后推出图像。用棉花糖测试。

    Example
    network={
        ssid="test_wlan1"
        psk="test_key1"
        key_mgmt=WPA-PSK
        priority=1
    }
    
    network={
        ssid="test_wlan2"
        psk="test_key2"
        key_mgmt=WPA-PSK
        priority=2
    }
    

    【讨论】:

      【解决方案3】:

      你可以在里面定义你的网络:

      system/etc/wifi/wpa_supplicant_overlay.conf
      

      可以在以下 AOSP 路径中找到:

      device/.../wpa_supplicant_overlay.conf
      

      在这个文件里面你可以有网络配置,例如:

      network={
          ssid="my wifi name"
          psk="my password here"
          key_mgmt=WPA-PSK
          priority=42
      }
      

      重启设备后,如果配置有效,会复制更多的网络配置到:

      /data/misc/wifi/wpa_supplicant.conf
      

      另一种方法是以编程方式添加网络。

      【讨论】:

      • 嗨,我在 /device/.. 下找到了六个 wpa_supplicant_overlay.conf 文件,位于不同的路径中。我应该在哪一个中添加网络配置?我确实在设备下搜索了文件,因为这里没有提到完整的路径。如果有人可以在添加配置后共享 wpa_supplicant_overlay.conf 会很好,这样我就可以知道在哪里添加
      【解决方案4】:

      基于@Carsten 解决方案的WPA 解决方案:

      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
      

      .

      public static void saveWpaConfig(Context context, String SSID, String Passphrase, boolean Hidden)
      {
          WifiManager wfMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
          // Turn on WiFi if necessary
          if (!wfMgr.isWifiEnabled())
              wfMgr.setWifiEnabled(true);
          // Do not continue if we can't get into a good state or
          // if this device already has at least one WifiConfiguration
          List<WifiConfiguration> cfgList = wfMgr.getConfiguredNetworks();
          if (!wfMgr.isWifiEnabled() || cfgList == null || cfgList.size() > 0)
              return;
      
          WifiConfiguration wfc = new WifiConfiguration();
          wfc.SSID = "\"".concat(SSID).concat("\"");
          wfc.preSharedKey = "\"".concat(Passphrase).concat("\"");
          wfc.hiddenSSID = Hidden;
      
          int networkId = wfMgr.addNetwork(wfc);
          if (networkId != -1) {
              wfMgr.enableNetwork(networkId, true);
              // Use this to permanently save this network
              // wfMgr.saveConfiguration();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-05
        • 2015-04-17
        • 2021-04-23
        • 2012-10-18
        • 2014-02-18
        • 1970-01-01
        相关资源
        最近更新 更多