2011-03-10 14 views
5

यह मुझे मार रहा है और किसी भी मदद की सराहना की जाएगी।एंड्रॉइड wifimanager हमेशा सच देता है

मैं वाईफाई प्रबंधक का उपयोग कर एक खुले नेटवर्क से कनेक्ट करना चाहता हूं। मेरी समस्या यह है कि कोड किसी भी नेटवर्क से कनेक्शन का दावा करता है - यहां तक ​​कि गैर-मौजूदा भी। नीचे पूरा कोड है जो निष्पादित हो जाता है और नेटवर्क के एसएसआईडी के साथ बुलाया जाता है। इससे कोई फर्क नहीं पड़ता कि आप नेटवर्क के एसएसआईडी के रूप में किस स्ट्रिंग को पास करते हैं, भले ही कोई भी नेटवर्क किसी भी आकार या रूप में मौजूद न हो, सक्षम नेटवर्कवर्क दावों को सच कर देता है, जिसका मेरा मानना ​​है कि यह नेटवर्क से जुड़ा हुआ है।

मुझे यह सुनिश्चित करने के लिए क्या करना है कि मेरे पास कनेक्शन है। इसलिए यदि मैं एक नेटवर्क एसएसआईडी पास करता हूं जो अस्तित्व में नहीं है (उदाहरण के लिए, यह सीमा से बाहर है) एपीआई को कनेक्ट करने का प्रयास करते समय विफलता वापस करनी चाहिए।

किसी भी विचार/संकेत/सुझावों की बहुत सराहना की जाएगी।

public boolean conto (String network){ 

    WifiConfiguration wifiConfiguration = new WifiConfiguration(); 
    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    List<WifiConfiguration> configs = null; 
    int inetId = -1; 


    // make sure there are no funny stuff in the config 
    configs = wifi.getConfiguredNetworks(); 
    for (WifiConfiguration config : configs) { 
     wifi.removeNetwork(config.networkId); 
     Log.d("********", "Removed Network: SSID=[" + config.SSID + "] and ID=[" + config.networkId + "]"); 

    } 

    // Now add the network 
    wifiConfiguration.SSID = "\"" + network + "\""; 
    wifiConfiguration.hiddenSSID = false; 
    //wifiConfiguration.priority = 1; 
    //wifiConfiguration.networkId = 999; 

    inetId = wifi.addNetwork(wifiConfiguration); 
    if(inetId < 0) { 
      Log.d("********", "Could Not Add Network......... [" + wifiConfiguration.SSID + "]"); 

     } 
     else { 

      Log.d("********", "Added Network......... [" + wifiConfiguration.SSID + "]"); 

      // Lets be paranoid and double check the config file 
      Log.d("********", " +++++++++++++++++++++++++ This is what I have in Config File"); 
      configs = wifi.getConfiguredNetworks(); 
      for (WifiConfiguration config : configs) { 
       Log.d("********", "In the Config file after add, SSID=[" + config.SSID + "], ID=[" + config.networkId + "]"); 

      } 

      // Now Enable the network 
      boolean successConnected = wifi.enableNetwork(inetId, true); 
      //boolean successAssociated = wifi.reassociate(); This did not change the results 

      if(successConnected) { 
       Log.d("********", "Connected to......... [" + inetId + "]"); 
      } 
      else { 

       Log.d("********", "Could Not Connect to......... [" + inetId + "]"); 

      } 


     } 
     return false; 
    } 
+0

क्या आपने कभी इसे हल किया है? मुझे [एक ही समस्या] है (http://stackoverflow.com/questions/11378452/android-wifimanager-making-a-phantom-connection)। – gcl1

उत्तर

0

यह मिला। इस तरह से एक कनेक्शन बनाओ।

Connecting to an Open network via WiFi in Android

सहेजें config ताकि एंड्रॉयड यह करने के लिए अगली बार WiFi पर जोड़ता है संदर्भित करेंगे। HTH!

9

मुझे लगता है कि समस्या यह है कि आपका कोड किसी वाईफाई नेटवर्क से कनेक्ट होने वाली धारणा पर आधारित है जो एक सिंक्रोनस प्रक्रिया है, जो यह नहीं है। कनेक्शन होने पर enableNetwork() ब्लॉक नहीं होता है और फिर परिणामी सफलता या कनेक्शन की विफलता को वापस कर देता है, यह तुरंत लौटाता है और नतीजा यह है कि अनुरोध ठीक से वाईफाई सेवा और आपूर्तिकर्ता तक पहुंच गया है या नहीं।

आप क्या डिवाइस के कनेक्शन की स्थिति के साथ चल रहा है में दृश्यता चाहते हैं, आप एक BroadcastReceiver साथ WifiManager. SUPPLICANT_STATE_CHANGED_ACTION और WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION प्रसारण आशय कार्यों पर नजर रखने की जरूरत है। एक बार जब आप कनेक्शन प्रक्रिया शुरू कर लेंगे, तो ये कॉलबैक आपको बताएंगे कि चीजें कैसे प्रगति करती हैं। उदाहरण के लिए, यदि आप ऐसे नेटवर्क में गुजरते हैं जो मौजूद नहीं है, तो कनेक्शन स्थिति लगभग तुरंत अस्वीकार होनी चाहिए। जबकि एक वैध नेटवर्क संबद्ध, प्रमाणीकरण और कनेक्ट करने की प्रक्रिया के माध्यम से जाएगा। इन सभी चरणों को इन प्रसारणों के माध्यम से समझाया जाता है।