2011-06-29 9 views

उत्तर

30

एसएसआईडी पास करें और यह विधि निम्न विधि से पास करें।

public void connectToAP(String ssid, String passkey) { 
    Log.i(TAG, "* connectToAP"); 

    WifiConfiguration wifiConfiguration = new WifiConfiguration(); 

    String networkSSID = ssid; 
    String networkPass = passkey; 

    Log.d(TAG, "# password " + networkPass); 

    for (ScanResult result : scanResultList) { 
     if (result.SSID.equals(networkSSID)) { 

      String securityMode = getScanResultSecurity(result); 

      if (securityMode.equalsIgnoreCase("OPEN")) { 

       wifiConfiguration.SSID = "\"" + networkSSID + "\""; 
       wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
       int res = wifiManager.addNetwork(wifiConfiguration); 
       Log.d(TAG, "# add Network returned " + res); 

       boolean b = wifiManager.enableNetwork(res, true); 
       Log.d(TAG, "# enableNetwork returned " + b); 

       wifiManager.setWifiEnabled(true); 

      } else if (securityMode.equalsIgnoreCase("WEP")) { 

       wifiConfiguration.SSID = "\"" + networkSSID + "\""; 
       wifiConfiguration.wepKeys[0] = "\"" + networkPass + "\""; 
       wifiConfiguration.wepTxKeyIndex = 0; 
       wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
       wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
       int res = wifiManager.addNetwork(wifiConfiguration); 
       Log.d(TAG, "### 1 ### add Network returned " + res); 

       boolean b = wifiManager.enableNetwork(res, true); 
       Log.d(TAG, "# enableNetwork returned " + b); 

       wifiManager.setWifiEnabled(true); 
      } 

      wifiConfiguration.SSID = "\"" + networkSSID + "\""; 
      wifiConfiguration.preSharedKey = "\"" + networkPass + "\""; 
      wifiConfiguration.hiddenSSID = true; 
      wifiConfiguration.status = WifiConfiguration.Status.ENABLED; 
      wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
      wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
      wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
      wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
      wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
      wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
      wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 

      int res = wifiManager.addNetwork(wifiConfiguration); 
      Log.d(TAG, "### 2 ### add Network returned " + res); 

      wifiManager.enableNetwork(res, true); 

      boolean changeHappen = wifiManager.saveConfiguration(); 

      if(res != -1 && changeHappen){ 
       Log.d(TAG, "### Change happen"); 

       AppStaticVar.connectedSsidName = networkSSID; 

      }else{ 
       Log.d(TAG, "*** Change NOT happen"); 
      } 

      wifiManager.setWifiEnabled(true); 
     } 
    } 
} 

public String getScanResultSecurity(ScanResult scanResult) { 
    Log.i(TAG, "* getScanResultSecurity"); 

    final String cap = scanResult.capabilities; 
    final String[] securityModes = { "WEP", "PSK", "EAP" }; 

    for (int i = securityModes.length - 1; i >= 0; i--) { 
     if (cap.contains(securityModes[i])) { 
      return securityModes[i]; 
     } 
    } 

    return "OPEN"; 
} 

मैनिफेस्ट फ़ाइल में आवश्यक अनुमति जोड़ने के लिए मत भूलना।

+3

इस कोड संकलन नहीं करता है के लिए इस कोड को शामिल करने के लिए मत भूलना, क ere परिभाषित स्केलResultList और wifiManager परिभाषित कर रहे हैं? – yoprogramo

+0

आपको WifiManager wifiManager (Context.getSystemService (Context.WIFI_SERVICE) प्राप्त करने की आवश्यकता होगी) और scanResultList चर प्राप्त करने के लिए उस पर एक कॉल करें (wifiMananger.getScanResults())। उपर्युक्त कोड मानता है कि आपके पास पहले से उपलब्ध नेटवर्क की एक सूची है। – wblaschko

+2

आपके कोड में AppStaticVar क्या है? –

2

यहां AnujAroshA से पोस्ट किया गया कोड वास्तव में सहायक है। लेकिन एक और मामला गायब है:

.. 
    } else if (securityMode.equalsIgnoreCase("PSK")) { 
    // PSK code 
    .. 

अन्यथा पीएसके कोड WEP और OPEN नेटवर्क के लिए भी निष्पादित किया जाता है।

और कोड शैली मेरी राय में इष्टतम नहीं है। दो स्ट्रिंग्स नेटवर्कएसएसआईडी और नेटवर्कपास बनाने के लिए अनावश्यक है। आप बस एसएसआईडी या पासकी का उपयोग कर सकते हैं।

सुझाव: वाईफाई कॉन्फ़िगरेशन और कनेक्ट विधि को विभाजित करें।

(1) WifiConfiguration बनाने के लिए विधि:

private WifiConfiguration createAPConfiguration(String networkSSID, String networkPasskey, String securityMode) { 
     WifiConfiguration wifiConfiguration = new WifiConfiguration(); 

     wifiConfiguration.SSID = "\"" + networkSSID + "\""; 

     if (securityMode.equalsIgnoreCase("OPEN")) { 

      wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 

     } else if (securityMode.equalsIgnoreCase("WEP")) { 

      wifiConfiguration.wepKeys[0] = "\"" + networkPasskey + "\""; 
      wifiConfiguration.wepTxKeyIndex = 0; 
      wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
      wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 

     } else if (securityMode.equalsIgnoreCase("PSK")) { 

      wifiConfiguration.preSharedKey = "\"" + networkPasskey + "\""; 
      wifiConfiguration.hiddenSSID = true; 
      wifiConfiguration.status = WifiConfiguration.Status.ENABLED; 
      wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
      wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
      wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
      wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
      wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
      wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
      wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 

     } else { 
      Log.i(TAG, "# Unsupported security mode: "+securityMode); 

      return null; 
     } 

     return wifiConfiguration; 

    } 

(2) एपी के लिए विधि कनेक्ट:

public int connectToAP(String networkSSID, String networkPasskey) { 
    for (ScanResult result : scanResultList) { 

     if (result.SSID.equals(networkSSID)) { 

      String securityMode = getScanResultSecurity(result); 

      WifiConfiguration wifiConfiguration = createAPConfiguration(networkSSID, networkPasskey, securityMode); 

      int res = wifiManager.addNetwork(wifiConfiguration); 
      Log.d(TAG, "# addNetwork returned " + res); 

      boolean b = wifiManager.enableNetwork(res, true); 
      Log.d(TAG, "# enableNetwork returned " + b); 

      wifiManager.setWifiEnabled(true); 

      boolean changeHappen = wifiManager.saveConfiguration(); 

      if (res != -1 && changeHappen) { 
       Log.d(TAG, "# Change happen"); 
       connectedSsidName = networkSSID; 
      } else { 
       Log.d(TAG, "# Change NOT happen"); 
      } 

      return res; 
     } 
    } 

    return -1; 
} 

(3) स्कैन विधि 100 पोस्ट AnujAroshA के रूप में%।

public String getScanResultSecurity(ScanResult scanResult) { 

    final String cap = scanResult.capabilities; 
    final String[] securityModes = { "WEP", "PSK", "EAP" }; 

    for (int i = securityModes.length - 1; i >= 0; i--) { 
     if (cap.contains(securityModes[i])) { 
      return securityModes[i]; 
     } 
    } 

    return "OPEN"; 
} 
4

100% काम करता है।

इस तरह से आप अपने विशिष्ट WIF MainActivity.java

के लिए

////////////// >>> वाईफाई कनेक्शन (WP2) < < < इस कोड से कनेक्ट कर सकते तक ////////////////

 WifiConfiguration wifiConfig = new WifiConfiguration(); 

     wifiConfig.SSID = String.format("\"%s\"", "Wifi name"); 
     wifiConfig.preSharedKey = String.format("\"%s\"", "Wifi password"); 

     WifiManager wifiManager=(WifiManager)getSystemService(WIFI_SERVICE); 
     int netId = wifiManager.addNetwork(wifiConfig); 
     wifiManager.disconnect(); 
     wifiManager.enableNetwork(netId, true); 
     wifiManager.reconnect(); 

और इसके अलावा अपने AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" />