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

解决方案 »

  1.   

    问题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的协议了。
      

  2.   

    addNetwork总是返回-1说明添加失败
    如何连接一个AP,
    对一个有networkID的WifiConfiguration只需要调用WifiManager的enableNetwork(networkId,true),没有配置过的AP,需要addNetwork,返回networkId,再调用enableNetwork(networkId,true)
    详细过程可以参考源码的wifiSetting
      

  3.   

    连接DHCP的wifi热点已经没问题了,但不知道如何设置静态IP呢?
      

  4.   

    在wifiStateTracker.java这个类里,貌似是通过dhcpinfo这个类来设置ip的, 难道静态ip也是通过dhcpinfo来设置的吗?
      

  5.   

    我最近也在研究這一塊,準備做好了寫篇blog
      

  6.   

    这是我写的 代码 应该 能解决你的 前三个问题吧
    第四个问题我也不知道我这是总返回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 />