2012-05-31 10 views
5

Qualche oggetto può aiutarmi a risolvere questo problema?Come connettere automaticamente un WiFi con SSID specificato?

Ecco il mio codice, e al mWifi.enableNetwork(netID, true) non è in grado di attivazione della rete e non in grado di auto connettersi alla rete specificata. Quindi voglio sapere dove ho fatto un errore?

public class WifiConnActivity extends Activity { 
    /** Called when the activity is first created. */ 
    final String tag = "WifiConn:..."; 
    EditText txt; 
    WifiManager mWifi; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 

     txt = (EditText)findViewById(R.id.editText1); 

     Button b1 = (Button)findViewById(R.id.B1);   
     b1.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) 
      { 

       if (mWifi.startScan()) //scan now 
       { 
        Log.d(tag, "startScan()"); 

        List<ScanResult> sRet = mWifi.getScanResults(); //scan results. 

        for (int i=0; i<sRet.size(); i++) 
        { 
         ScanResult retS = sRet.get(i); 
         txt.append("resT: " + retS.SSID +" " + retS.BSSID + "\n"); 
         Log.d(tag, "resT: " + retS.SSID +" " + retS.BSSID); 

         if (retS.SSID.equalsIgnoreCase("TEST")) 
         { 
          txt.append("Found: " + retS.SSID +" " + retS.BSSID + "\n"); 

          WifiConfiguration wc = new WifiConfiguration(); 

          wc.SSID = "\""+retS.SSID+"\""; 
          wc.BSSID = retS.BSSID; 
          wc.status = WifiConfiguration.Status.ENABLED; 
          wc.hiddenSSID = true; 

          int netID = mWifi.addNetwork(wc); // add network 
          txt.append("addNetwork: "+ Integer.toString(netID) +"\n"); 

          if(mWifi.enableNetwork(netID, true)) // enable network, but cannot work??????????? 
          { 
           txt.append("enableNetwork: true\n"); 
          } 
         } 
        } 

       } 
      } 

     });  
    } 
} 
+0

Si prega di inviare l'output della varie Log.i() s. – QED

+0

Non funziona alla mia fine – theLazyFinder

risposta

2

Penso che avete bisogno di aggiungere un WifiConfiguration.KeyMgmt all'oggetto WifiConfiguration. Supponendo che è una rete aperta:

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

Inoltre, essere cauti nel ritenere che i risultati della scansione sono disponibili immediatamente dopo l'uscita della chiamata a startScan(). La soluzione migliore in questo caso è aggiungere un BroadcastReceiver su WifiManager.SCAN_RESULTS_AVAILABLE_ACTION e aggiungere a tutto il codice da mWifi.getScanResults() in avanti. È necessario aggiungere una chiamata a mWifi.reconnect() quando si ottiene enableNetwork() per riuscire.

Per quanto riguarda l'inizializzazione di WifiConfiguration wc, mi piacerebbe se si considerasse il mio post here. Infine, un'altra buona risposta è here.

+0

capito. è la risposta. Grazie. –

0

prova ad aggiungere restanti informazioni sulla rete, come cifrari ammessi, schema di Mangement chiave e la PSK (se si utilizza uno)

In secondo luogo il check-in lista reti configurato primo a fare in modo che si don 't cercare di aggiungere un'altra rete con la stessa configurazione di quanto non ci sia il punto a farlo.

Come raccomandazione no StartScan() e attendere che finisca. Registrati per SCAN_RESULTS_AVAILABLE_ACTION e usa una richiamata dal ricevitore di trasmissione alla tua attività per elaborare quei risultati.

Problemi correlati