关于连接WIFI的问题

hatum 2011-04-28 11:12:50
请教几个连接wifi的问题:
1、扫描热点的时候,如何获得热点的协议、加密方式等信息?
2、WifiConfiguration.AuthAlgorithm,WifiConfiguration.GroupCipher ,WifiConfiguration.PairwiseCipher,WifiConfiguration.Protocol 分别是什么,我看了文档还是有点不太明白, 他们之间的关系是什么?
3、如何连接到一个加密的AP
4、如何获取连接失败的原因? addNetwork总是返回-1,enableNetwork总是返回false,如何知道具体是哪里出问题了。


实在不解,多多指教,非常感谢!
...全文
379 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
floweriswho 2011-10-13
  • 打赏
  • 举报
回复
这是我写的 代码 应该 能解决你的 前三个问题吧
第四个问题我也不知道。。。我这是总返回true 不论 ssid和密码对不对 就是 true我都疯了

<pre class="java" name="code">
/*
* wifi设置
*/

/*
* 打开wifi
*/
public int openWifi() {
try {
mWifiManager.setWifiEnabled(true);
return SUCCESS;
} catch (Exception e) {
return FAIL;
}

}

/*
* 打开wifi 连接指定的 wifi
*/
public int openWifi(String wifiName, String pwd) {
try {
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\""+wifiName+"\""; //账户 格式为 "ssid"
wc.preSharedKey = "\""+pwd+"\""; //该热点的密码 格式为 "pwd"
wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
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.WPA);

mWifiManager.setWifiEnabled(true);
wc.networkId = mWifiManager.addNetwork(wc);
mWifiManager.enableNetwork(wc.networkId, true);

return SUCCESS;
} catch (Exception e) {
return FAIL;
}
}

/*
* 关闭wifi
*/
public int closeWifi() {
try {
mWifiManager.setWifiEnabled(false);
return SUCCESS;
} catch (Exception e) {
return FAIL;
}
}

/*
* 获得wifi列表
*/
public String[] scanWifi() {
String[] res;
try {
mWifiManager.startScan();
mWifiList = mWifiManager.getScanResults();
mWifiConfiguration = mWifiManager.getConfiguredNetworks();
res = new String[mWifiList.size() + 1];
res[0] = SUCCESS + "";
int i = 1;
for (ScanResult sr : mWifiList) {
res[i] = sr.toString();
Log.e(L, "ScanResult:" + sr.toString());
i++;
}
return res;
} catch (Exception e) {
res = new String[2];
res[0] = FAIL + "";
res[1] = e.toString();
return res;
}
}

/*
* 连接wifi
*/
public int connectWifi(String wifiName, String pwd) {
try {
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\""+wifiName+"\""; //账户 格式为 "ssid"
wc.preSharedKey = "\""+pwd+"\""; //该热点的密码 格式为 "pwd"
wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
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.WPA);
wc.networkId = mWifiManager.addNetwork(wc);
boolean bbb=mWifiManager.enableNetwork(wc.networkId, true);
Log.e(L, bbb+"");
return SUCCESS;
} catch (Exception e) {
return FAIL;
}
}

/*
* 获得当前wifi状态
*/
public String[] getWifiState() {
String[] res = new String[2];
try {
mWifiInfo = mWifiManager.getConnectionInfo();
Log.e(L, "mWifiInfo:" + mWifiInfo.toString());
res[0] = SUCCESS + "";
res[1] = mWifiInfo.toString();
return res;
} catch (Exception e) {
res[0] = FAIL + "";
res[1] = e.toString();
return res;
}
}
</pre>
<br />
  • 打赏
  • 举报
回复
我最近也在研究這一塊,準備做好了寫篇blog
hatum 2011-05-06
  • 打赏
  • 举报
回复
在wifiStateTracker.java这个类里,貌似是通过dhcpinfo这个类来设置ip的, 难道静态ip也是通过dhcpinfo来设置的吗?
majaw 2011-05-06
  • 打赏
  • 举报
回复
是的,都在那里面
hatum 2011-05-04
  • 打赏
  • 举报
回复
能列举一下不同的协议和加密方式需要配置哪些参数吗?
majaw 2011-05-04
  • 打赏
  • 举报
回复
wifiStateTracker.java
hatum 2011-05-04
  • 打赏
  • 举报
回复
连接DHCP的wifi热点已经没问题了,但不知道如何设置静态IP呢?
majaw 2011-05-04
  • 打赏
  • 举报
回复
addNetwork总是返回-1说明添加失败
如何连接一个AP,
对一个有networkID的WifiConfiguration只需要调用WifiManager的enableNetwork(networkId,true),没有配置过的AP,需要addNetwork,返回networkId,再调用enableNetwork(networkId,true)
详细过程可以参考源码的wifiSetting

qminglin 2011-04-29
  • 打赏
  • 举报
回复
问题1

private WifiManager mWifiMager;
public void StartScan()
{
mWifiManager.startScan();
//得到扫描结果
mWifiList = mWifiManager.getScanResults();
//得到配置好的网络连接
mWifiConfiguration = mWifiManager.getConfiguredNetworks();
}
//得到网络列表
public List<ScanResult> GetWifiList()
{
return mWifiList;
}
//查看扫描结果
public StringBuilder LookUpScan()
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < mWifiList.size(); i++)
{
stringBuilder.append("Index_"+new Integer(i + 1).toString() + ":");
//将ScanResult信息转换成一个字符串包
//其中把包括:BSSID、SSID、capabilities、frequency、level
stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append("\n");
}
return stringBuilder;
}

问题2:这个问题你要看wifi的协议了。

hatum 2011-04-29
  • 打赏
  • 举报
回复
一天了,, 真的没人会?
hatum 2011-04-28
  • 打赏
  • 举报
回复
没人回答吗?
hatum 2011-04-28
  • 打赏
  • 举报
回复
有人会吗?

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧