【发布时间】:2014-12-26 05:17:30
【问题描述】:
我想使用以下配置以编程方式在 android 中创建接入点。
AccessPointName :SomeName
Security:WPA2 PSK
Password:SomeKey
我该怎么做? 问候
【问题讨论】:
-
我也面临同样的问题。它只创建开放网络。你有什么解决办法吗?
标签: android android-wifi
我想使用以下配置以编程方式在 android 中创建接入点。
AccessPointName :SomeName
Security:WPA2 PSK
Password:SomeKey
我该怎么做? 问候
【问题讨论】:
标签: android android-wifi
我曾经遇到过这个问题。为了创建 WPA2 PSK 接入点,您需要使用 WPA2 PSK 参数填充 WifiConfiguation 对象。但是我找不到将KeyManagement 设置为WPA2_PSK 的方法。只有WPA_PSK、IEEE8021X、WPA_EAP 和NONE 的选项。然后我阅读了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和反射技术来激活接入点。
【讨论】:
我也遇到了同样的问题,因为 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
【讨论】:
How to create access point programmatically 有一个 SO 线程。
但是,如果您看到该链接中的代码,它正在使用 JAVA 反射技术来访问底层 Android 框架 API。 这可能表明没有直接的 API 来切换或编程这些系统设置。
此外,查看 Android 文档中 Settings.System 类的 API 摘要(顺便说一句,它是“最终”类,暗示不会有太多东西可编辑),没有证据表明 Android 为应用程序提供任何 API切换/编程系统设置。
我提供该链接的引用只是为了强调这样一个事实,即调整 Android 系统设置(如 APN),Android 框架似乎没有提供公共/直接 API,主要是出于安全原因。
我们的项目中有一个要求,我需要以编程方式切换互联网广播,而在另一种情况下,我需要关闭 Telephony 对话框。
没有公共 API 可以做到这一点,获得所需结果的唯一方法是使用反射技术,这种技术既不推荐也不可移植,应该避免。
【讨论】:
你可以使用accesspoint:
WifiApControl apControl = WifiApControl.getInstance(context);
apControl.setEnabled(wifiConfiguration, true);
您只需使用您的 WPA2 PSK 参数填充 WifiConfiguartion 对象。
【讨论】: