如何在android中连接到无线网络?

如何在android中连接到无线网络?,第1张

概述我已设法扫描无线网络并在我的应用程序中获取扫描结果.但有没有办法可以使用我的应用程序本身连接到他们?我想知道是否必须为我正在尝试连接的网络指定加密类型?我的要求是连接到任何无线网络而不管它的加密类型?有任何想法吗?谢谢解决方法:要连接到实施以下步骤所需的WiFiAP:>扫描W

我已设法扫描无线网络并在我的应用程序中获取扫描结果.但有没有办法可以使用我的应用程序本身连接到他们?我想知道是否必须为我正在尝试连接的网络指定加密类型?我的要求是连接到任何无线网络而不管它的加密类型?

有任何想法吗?
谢谢

解决方法:

要连接到实施以下步骤所需的WiFi AP:

>扫描WiFi

确保您有适当的AP.请记住,您必须为安全的AP提供密码.假设您知道自己喜欢的女巫AP,现在我们将采取其他措施:
>创建新的个人资料

我们需要支持以下信息:

应该是什么类型的AP:
                               开放点,
                               WEP,
                               WPA,
                              (或WPA2),具有共享密钥身份验证,
                               WPA2-Enterprise(RADIUS服务器身份验证)

优先级 – 优先级确定给予网络的优先级
                   选择与之相关的接入点时,通过wpa_supplicant
                   关联(我设置默认1000)

SSID – AP名称

密码 – 如果它是安全的AP.

这是一个演示该技术的片段方法:

我使用单个枚举TEncMode encMode来表示switch语句

....WifiConfiguration wc = new WifiConfiguration();    wc.allowedAuthAlgorithms.clear();    wc.allowedGroupCiphers.clear();    wc.allowedKeyManagement.clear();    wc.allowedPairwiseCiphers.clear();    wc.allowedProtocols.clear();    switch (encMode) {    case ENC_WEP:        // If password is empty, it should be left untouched        if (!TextUtils.isEmpty(pswd)) {            wc.wepKeys[0] = TextUtil.convertToQuotedString(pswd);        }        wc.wepTxKeyIndex = 0;        wc.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);        wc.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);        wc.allowedKeyManagement.set(KeyMgmt.NONE);        wc.allowedGroupCiphers.set(GroupCipher.WEP40);        wc.allowedGroupCiphers.set(GroupCipher.WEP104);        break;    case ENC_WPA:    case ENC_WPA2:        wc.allowedGroupCiphers.set(GroupCipher.TKIP);        wc.allowedGroupCiphers.set(GroupCipher.CCMP);        wc.allowedKeyManagement.set(KeyMgmt.WPA_PSK);        wc.allowedPairwiseCiphers.set(PairwiseCipher.CCMP);        wc.allowedPairwiseCiphers.set(PairwiseCipher.TKIP);        wc.allowedProtocols.set(Protocol.RSN);        wc.allowedProtocols.set(Protocol.WPA);        // If password is empty, it should be left untouched        if (!TextUtils.isEmpty(pswd)) {            if (pswd.length() == 64) {                // Goes unquoted as hex                wc.preSharedKey = pswd;            } else {                // Goes quoted as ASCII                wc.preSharedKey = TextUtil.convertToQuotedString(pswd);            }        }        break;        //      case ENC_WPA2_ENTERPRISE:        ....        //          break;    default:        wc.allowedKeyManagement.set(KeyMgmt.NONE);        break;    }    // This is must be quoted according to the documentation     // http://developer.androID.com/reference/androID/net/wifi/WifiConfiguration.HTML#SSID    wc.SSID = TextUtil.convertToQuotedString(ssID.toString());    wc.hIDdenSSID = false;    wc.priority = prior;    wc.BSSID = null;    wc.status = WifiConfiguration.Status.ENABLED; 

现在我们根据我们的要求配置了新的AP.现在让我们创建它:

>仅创建新的AP

 .... int res = -1; WifiManager m_WifiManager = (WifiManager)m_context.getSystemService(Context.WIFI_SERVICE); ....        /** If profile exists, do nothing  */    if(ifConnectionProfileExists(ssID) == true){        Log.i(Constants.TAG, "createConnectionProfile :: " + "CREATE_PROfile ssID=" + ssID  + " exists");    }    else{        res = m_WifiManager.addNetwork(wc);        Log.i(Constants.TAG, "createConnectionProfile :: " + " CREATE_PROfile ssID=" + ssID  + " dosn't exist, addNetwork ... res = " + res);        // Don't make to AP high priority to connect        //m_WifiManager.enableNetwork(res, false);          m_WifiManager.saveConfiguration();        if(res != -1){                         // profile created                         }        else{                    // Failed to add profile           }    }

如果你跳过这个实现,关闭WiFi关闭你创建的AP将消失
m_WifiManager.saveConfiguration();

到目前为止,我们可以等待androID连接到我们的新AP,或者我们可以自己做

>创建并连接到AP

 int res = -1;    /** If profile exists, do nothing  */    if(ifConnectionProfileExists(ssID) == true){        res = getNetIDBySSID(ssID);    }    else{        res = m_WifiManager.addNetwork(wc);                 }    // Don't make to AP high priority to connect    boolean b = m_WifiManager.enableNetwork(res, true);          if(b == true){        fixSupplicant();        m_WifiManager.saveConfiguration();        // start connect to AP    }    else{                   // Failed    }        ....private voID fixSupplicant() {    final SupplicantState state = m_WifiManager.getConnectionInfo().getSupplicantState();    boolean isReconnectDone = false;if ((state == SupplicantState.SCANNING)        || (state == SupplicantState.disCONNECTED)         || (state == SupplicantState.DORMANT)) {    isReconnectDone = m_WifiManager.reconnect();;}        }   private boolean ifConnectionProfileExists(String ssID){List<WifiConfiguration> apProfiles = m_WifiManager.getConfigurednetworks();// remove profile if exists:for (int i = 0; i < apProfiles.size(); i++) {    final WifiConfiguration ap = apProfiles.get(i);    if ((ap.SSID != null)) {                // try to find by SSID        if (TextUtils.equals(ap.SSID), ssID) {                              return true;        }    }               }return false; }

Enum TEncMode

/*** Represents encryption types modes of access points*/public enum TEncMode {/** * No encryption (open spot) */ENC_NONE(0),/* * General encryption */ENC_UNKNowN(1),/** * WEP */ENC_WEP(2),/** * WPA */ENC_WPA(3),/** * WPA (or WPA2), with shared-key authentication */ENC_WPA2(4),/** * WPA2-Enterprise (RADIUS Server authentication). */ENC_WPA2_ENTERPRISE(5);public static TEncModeFromIntToEnum(    int value ) throws Exception{    for ( TEncMode c : TEncMode.values() ) {        if ( c.mID == value ) {            return c;        }    }    throw new AgException( new StringBuilder("Illegal TEncMode: ").append(value).toString() );}public intFromEnumToInt() {    return mID;}private TEncMode( int ID ){    mID = ID;}private int mID;}

就这样.肯定你可以听取WiFi状态改变以捕获CONNECTED事件.因为我们不知道设备连接到您的AP需要多长时间.但我们禁用了所有其他AP并启用了新AP.我们可以从谷歌获得http响应,以确保我们的AP有互联网.

要我添加这个方法:

    /** * Surround the given string in quotes. *  * @param string The text to surround in quotes. * @return string wrapped with quotes. */static public String convertToQuotedString(String string){    if (string==null) {        string = "";    }    empty(workBuffer);    workBuffer.append("\"");    workBuffer.append(string);    workBuffer.append("\"");    return workBuffer.toString();}
总结

以上是内存溢出为你收集整理的如何在android中连接到无线网络?全部内容,希望文章能够帮你解决如何在android中连接到无线网络?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1106196.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存