2012-10-08 28 views
13

खोलने के लिए कनेक्ट करें मैं एन्क्रिप्टेड नेटवर्क से कनेक्ट करने के लिए नीचे दिए गए कोड का उपयोग करता हूं। हालांकि यदि कोई नेटवर्क असुरक्षित है और मैं कुंजी खाली छोड़ देता हूं ("") तो यह विफल हो जाता है। क्या किसी को यह पता है कि इसे कैसे हल किया जाए? इसके अलावा यह पता लगाना संभव है कि एसएसआईडी/बीएसएसआईडी का उपयोग कर नेटवर्क खुलता है या नहीं? या मुझे फ़िल्टर के साथ स्कैन करना है?वाईफाई

public void connectToSSID(final String ssid, final String key) { 
    Log.i("wifimaster", "connection to "+ssid); 

    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "\""+ssid+"\""; //IMPORTANT! This should be in Quotes!! 
    wc.priority = 40; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 

    wc.preSharedKey = "\""+key+"\""; 
    wc.wepKeys[0] = "\""+key+"\""; //This is the WEP Password 
    wc.wepTxKeyIndex = 0; 

    wc.preSharedKey = "\""+key+"\""; 

    int res = wifiManager.addNetwork(wc); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean es = wifiManager.saveConfiguration(); 
    Log.d("WifiPreference", "saveConfiguration returned " + es); 
    boolean b = wifiManager.enableNetwork(res, true); 
    Log.d("WifiPreference", "enableNetwork returned " + b); 

    if(b) 
     Toast.makeText(c, c.getString(R.string.connected), Toast.LENGTH_SHORT).show(); 
    else 
     Toast.makeText(c, c.getString(R.string.unconnected), Toast.LENGTH_SHORT).show(); 
} 

उत्तर

12

उपयोग

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

केवल और यह काम करेंगे।

wc पर अन्य सभी असाइनमेंट हटाएं, नेटवर्क से कनेक्ट करने के एक साधारण कार्य के लिए उन्हें उपयोग करना आवश्यक नहीं है। आप creating नेटवर्क नहीं हैं, आप existing से कनेक्ट कर रहे हैं।

पूर्ण समाधान के लिए इस लिंक को जांचें: How do I connect to a specific Wi-Fi network in Android programmatically? इसमें आपको जो कुछ भी जानने की आवश्यकता है, वह सब कुछ है।

+0

क्या आपके पास * केवल * एसएसआईडी से एन्क्रिप्शन विधि कैसे प्राप्त करें इस पर कोई कोड है? – bluewhile

+2

नहीं। आपको केवल एसएसआईडी से एन्क्रिप्शन विधि नहीं मिल रही है। आपको नेटवर्क के लिए स्कैन करना होगा और सभी उपलब्ध नेटवर्क प्राप्त करने के लिए स्कैनरसेट का उपयोग करना होगा। फिर दिए गए एसएसआईडी के साथ अपने नेटवर्क की खोज करें और इसकी एन्क्रिप्शन विधि पाएं। यहां एक लिंक है: http://stackoverflow.com/a/12747455/1117338 और http://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities –

संबंधित मुद्दे