2017-02-07 28 views
9

मैं एक आईओटी डिवाइस के लिए एक एंड्रॉइड ऐप प्रोग्रामिंग कर रहा हूं। मुझे डिवाइस को वाईफाई उपयोगकर्ता नाम और पासवर्ड देना है, इसलिए मैं ऐसा करने के लिए एंड्रॉइड ऐप का उपयोग कर रहा हूं। मेरे पास निम्न कोड है, लेकिन ऐसा लगता है कि यह हमेशा नेटवर्क मौसम से कनेक्ट होता है या सही पासवर्ड नहीं दिया जाता है।एंड्रॉइड टेस्ट वाईफाई कनेक्शन प्रोग्रामेटिक

यह मैं उसी एपी पर इसका परीक्षण कर रहा हूं कि मेरा फोन कनेक्ट है।

वांछित कार्रवाई वर्तमान एपी से

डिस्कनेक्ट है -> दिए गए क्रेडेंशियल्स का उपयोग कनेक्ट करने का प्रयास -> मूल नेटवर्क से कनेक्ट करें।

वाईफ़ाई नेटवर्क और पासवर्ड को सही तरीके से सत्यापित करने के लिए मुझे किन कदमों की आवश्यकता है?

कोड:

WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = "\"" + ssid + "\""; 
    for(ScanResult sr: wifiList){ 
     if(sr.SSID.equals(ssid)){ 
      if(sr.capabilities.contains("WEP")){ 
       if(isNumeric(pass)){ 
        conf.wepKeys[0] = pass ; 
       }else{ 
        conf.wepKeys[0] = "\"" + pass + "\""; 
       } 
       conf.wepTxKeyIndex = 0; 
       conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
       conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
      }else if(sr.capabilities.contains("PSK")){ 
       conf.preSharedKey = "\""+ pass +"\""; 
      }else if(sr.capabilities.contains("EAP")){ 
       wifiName.setError("EAP networks not supported"); 
       //todo support EAP 
      }else{ 
       conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
      } 

      WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); 
      wifiManager.addNetwork(conf); 

      List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
      for(WifiConfiguration i : list) { 
       if(i.equals(conf)) { 
        wifiManager.disconnect(); 
        if(!wifiManager.enableNetwork(i.networkId, true)){ 
         wifiPassword.setError("Incorrect Password"); 
         wifiManager.reconnect(); 
         return; 
        }else{ 
         wifiManager.reconnect(); 
         addUser(deviceSN, ssid, pass); 
        } 
       } 
      } 

      break; 
     } 
    } 
+0

आप इस को ठीक कर दिया की तरह है? मुझे भी इस मुद्दे का सामना करना पड़ रहा है। अगर मैं गलत पासवर्ड जोड़ता हूं तो भी सच हो जाता है। तो क्या आप इस समस्या को हल करने के विचार का सुझाव दे सकते हैं – AngelJanniee

उत्तर

0

आप उपलब्ध वाईफाई नेटवर्क के लिए स्कैन करने की जरूरत नहीं है हो सकता है, आप आसानी से इस तरह कर सकते हैं:

public static void connectToWifi(Activity activity, String ssid, String password) { 
     WifiConfiguration wifiConfig = new WifiConfiguration(); 

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

     WifiManager wifiManager = (WifiManager) activity.getSystemService(WIFI_SERVICE); 
     wifiManager.setWifiEnabled(true); 
     int netId = wifiManager.addNetwork(wifiConfig); 
     wifiManager.disconnect(); 
     wifiManager.enableNetwork(netId, true); 
     wifiManager.reconnect(); 
    } 
+0

मैं कैसे बताऊंगा कि नेटवर्क से कनेक्ट होने या विफल होने पर मैं कैसे कहूं? – Reid

+0

wifiManager.reconnect(); परिणामी बुलियन लौटाएगा .. चाहे आप जुड़े हों या –

+0

यदि मैं गलत पासवर्ड भी जोड़ता हूं तो वही मान लौटाता हूं .. क्या आप समाधान का सुझाव दे सकते हैं – AngelJanniee

4

आप NETWORK_STATE_CHANGED_ACTION रजिस्टर करना चाहिए का पालन करें।

इसका उपयोग करके, आप WI-FI नेटवर्क स्थिति प्राप्त कर सकते हैं और आपको यह जांचने की आवश्यकता है कि यह कनेक्ट किए गए राज्य तक पहुंच गया है। यदि डिवाइस कुछ टाइमआउट के बाद कनेक्ट नहीं हुआ है, तो आप मान सकते हैं कि कनेक्शन विफल हो गया है।

एक अन्य सहायक रिसीवर SUPPLICANT_STATE_CHANGED_ACTION हो सकता है।

public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 

     if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { 

      NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 

      switch (info.getState()) { 
       case CONNECTING: 
        break; 
       case CONNECTED: 
        break; 
       case DISCONNECTING: 
        break; 
       case DISCONNECTED: 
        break; 
       case SUSPENDED: 
        break; 
       } 
      } 
0

बस की जाँच करें यह है कि

public static boolean isConnectingToInternet(Context context){ 
    try { 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo info[] = connectivity.getAllNetworkInfo(); 
      if (info != null) { 
       for (int i = 0; i < info.length; i++) 

        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
         return true; 
        } 

      } 
     } 
    }catch (Exception e){} 
    return false; 

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