【问题标题】:Creating WPA2 PSK Access Point in Android Programmatically以编程方式在 Android 中创建 WPA2 PSK 访问点
【发布时间】:2014-12-26 05:17:30
【问题描述】:

我想使用以下配置以编程方式在 android 中创建接入点。 AccessPointName :SomeName Security:WPA2 PSK Password:SomeKey

我该怎么做? 问候

【问题讨论】:

  • 我也面临同样的问题。它只创建开放网络。你有什么解决办法吗?

标签: android android-wifi


【解决方案1】:

我曾经遇到过这个问题。为了创建 WPA2 PSK 接入点,您需要使用 WPA2 PSK 参数填充 WifiConfiguation 对象。但是我找不到将KeyManagement 设置为WPA2_PSK 的方法。只有WPA_PSKIEEE8021XWPA_EAPNONE 的选项。然后我阅读了WifiConfiguration.java 的android 源代码。我发现确实有WPA2_PSK 的选项,但它被@hide 隐藏,但它是一个int,值为4。所以我所做的就是在wifiConfiguration.allowedKeyManagement.set(4); 中传递4。请参阅下面的代码。

WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = "SomeName";
wifiConfiguration.preSharedKey = "SomeKey";
wifiConfiguration.hiddenSSID = false;
wifiConfiguration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wifiConfiguration.allowedKeyManagement.set(4);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

最后通过wifiConfiguration 使用accesspoint 如下

WifiApControl apControl = WifiApControl.getInstance(context);

apControl.setEnabled(wifiConfiguration, true);

或者你可以在java中使用这个wifiConfiguration和反射技术来激活接入点。

【讨论】:

  • 这也适用于android 6?
  • @Yuvaraja 我已经在装有 Android 6.0.1 的设备上对其进行了测试,并且运行流畅。
  • 感谢您的快速回放,我已经在代码stackoverflow.com/questions/44175056/… 中实现了您的逻辑,您能检查一下问题是什么吗?
  • 添加了 netConfig.allowedKeyManagement.set(4);在配置中
  • @Yuvaraja 我刚刚检查了 Android 6.0.1 上 WifiConfiguration 类的来源,WPA2_PSK 的值仍然为 4。所以它应该可以工作。让我用你做的代码再试一次。
【解决方案2】:

我也遇到了同样的问题,因为 KeyMangement 解决了我的问题。

WifiConfiguration myConfig = new WifiConfiguration();
        myConfig.SSID = ssid; // SSID name of netwok
        myConfig.preSharedKey = password; // password for network
        myConfig.allowedKeyManagement.set(4); // 4 is for KeyMgmt.WPA2_PSK which is not exposed by android KeyMgmt class
        myConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); // Set Auth Algorithms to open
        try {
            Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
            return (Boolean) method.invoke(mWifiManager, myConfig, true);  // setting and turing on android wifiap with new configrations
        } catch (Exception e) {
            e.printStackTrace();
        }

阅读更多Link

【讨论】:

  • 感谢您的好评://4 用于 KeyMgmt.WPA2_PSK,它没有被 android KeyMgmt 类公开,这是我正在寻找的缺失部分。
【解决方案3】:

How to create access point programmatically 有一个 SO 线程。

但是,如果您看到该链接中的代码,它正在使用 JAVA 反射技术来访问底层 Android 框架 API。 这可能表明没有直接的 API 来切换或编程这些系统设置。

此外,查看 Android 文档中 Settings.System 类的 API 摘要(顺便说一句,它是“最终”类,暗示不会有太多东西可编辑),没有证据表明 Android 为应用程序提供任何 API切换/编程系统设置。

我提供该链接的引用只是为了强调这样一个事实,即调整 Android 系统设置(如 APN),Android 框架似乎没有提供公共/直接 API,主要是出于安全原因。

我们的项目中有一个要求,我需要以编程方式切换互联网广播,而在另一种情况下,我需要关闭 Telephony 对话框。

没有公共 API 可以做到这一点,获得所需结果的唯一方法是使用反射技术,这种技术既不推荐也不可移植,应该避免。

【讨论】:

【解决方案4】:

你可以使用accesspoint:

WifiApControl apControl = WifiApControl.getInstance(context);

apControl.setEnabled(wifiConfiguration, true);

您只需使用您的 WPA2 PSK 参数填充 WifiConfiguartion 对象。

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2012-08-07
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多