当前位置: 首页 > 面试题库 >

如何以及如何设置为Android WifiConfiguration.preSharedKey以连接到WPA2 PSK WiFi网络

莫兴言
2023-03-14
问题内容

在Android 1.5中(也在1.6中)

如何从代码添加访问点?

给定的支持WPA2的访问点。这是我的代码段。

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiConfiguration wc = new WifiConfiguration();
// This is must be quoted according to the documentation 
// http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html#SSID
wc.SSID = "\"SSIDName\"";
wc.preSharedKey  = "password";
wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;        
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
int res = wifi.addNetwork(wc);
Log.d("WifiPreference", "add Network returned " + res );
boolean b = wifi.enableNetwork(res, true);        
Log.d("WifiPreference", "enableNetwork returned " + b );

此代码失败,因为出现在LogCat中

01-26 16:44:13.550:错误/ wpa_supplicant(2032):第0行:无效的PSK’密码’。

我确定这是密码,其余所有参数都是正确的。我想念什么?


问题答案:

我悲伤的原因在此文档问题中

虽然这里的文档指出

“与WPA-PSK一起使用的预共享密钥。读取此密钥的值时,不返回实际密钥,如果密钥具有值,则仅返回“ *”,否则返回空字符串。”

是正确的,但是非常重要的是它 没有说的 是Linux命令的以太64字节哈希结果

wpa_passphrase <ssid> [passphrase]

点访问接入点的密码

因此,如果Access Point的PSK是 “ example” ,则必须像这样在Java中传递它

WifiConfiguration myWiFiConfig = new WifiConfiguration();
...
myWiFiConfig.preSharedKey = "\"example\"";
...

要么

myWiFiConfig.preSharedKey = "0a0b0f62170ecc5bcf721b6ff170b8b560101b5d56b00a26abec217e0bb4aa1f";

对于所有其他人,您都会发现正确的方法是:

照原样复制并粘贴,并节省您已经花了半天的时间(特别感谢Reflog)

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"SSIDName\"";
wc.preSharedKey  = "\"password\"";
wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;        
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
int res = wifi.addNetwork(wc);
Log.d("WifiPreference", "add Network returned " + res );
boolean b = wifi.enableNetwork(res, true);        
Log.d("WifiPreference", "enableNetwork returned " + b );


 类似资料:
  • 刚到spring boot,我想知道如何为MongoDB配置连接细节。我已经尝试了正常的例子,但没有涉及连接的细节。 我想指定将要使用的数据库和运行MongoDB的主机的URL/端口。 有什么提示或提示吗?

  • 要连接到以太坊测试网,是这样的: (摘自此处:https://hardhat.org/tutorial/deploying-to-a-live-network.html ) 如何为RSK Testnet添加网络配置? (请注意,我使用的是种子短语,而不是原始私钥)

  • 问题内容: 我已经在Glassfish中使用jndi资源设置了一个连接池,并对其进行了设置。我很困惑如何配置hibernate以获取它。 我遇到了很多文章,将其配置为使用C3P0连接池。好吧,我迷路了。我发现我需要设置: 数据源是否与连接池中的数据源相同? hibernate.jndi.class是什么? hibernate.connection.username和hibernate.connec

  • 我正在为来自apache服务器的带有的烧瓶应用程序提供服务。我正在使用以某个url扩展名将所有流量转发到应用程序,就像apache文件中的那样: < code>flask_restplus api的设置如下: 该应用程序可以正常工作,除了当我转到swagger路由时,烧瓶服务器开始在url基础上寻找swagger依赖项 /swaggerui/(而不是所需的),因此swagger UI无法加载。 有

  • 我用的是8.2角。当我在vps服务器上构建项目时,我面临以下问题:

  • 本文向大家介绍linux: centos设置ip以及连接外网的方法,包括了linux: centos设置ip以及连接外网的方法的使用技巧和注意事项,需要的朋友参考一下 注明:我使用的的使centos 7,所有文件名是ifcfg-enp0s3, 一、 设置虚拟机中linux的ip,使本地能连通虚拟机的linux系统 1>.进入本地windows的cmd,输入ipconfig    2>.根据上面的信