2012-05-31 10 views
5

¿Puede algún organismo ayudarme a resolver este problema?¿Cómo conectar automáticamente un WiFi con un SSID especificado?

Aquí está mi código, y en mWifi.enableNetwork(netID, true) no se puede habilitar la red y no se puede conectar automáticamente a la red especificada. Entonces, ¿quiero saber dónde cometí un error?

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

Por favor, publique la salida de sus diversos Log.i() s. – QED

+0

No funciona en mi extremo – theLazyFinder

Respuesta

2

Creo que debe agregar un WifiConfiguration.KeyMgmt a su objeto WifiConfiguration. Asumiendo que es una red abierta:

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

También, ser cauteloso en el supuesto de que los resultados del análisis están disponibles inmediatamente después de la salida de su llamada a startScan(). La mejor apuesta en este caso es agregar un BroadcastReceiver en WifiManager.SCAN_RESULTS_AVAILABLE_ACTION y agregarle todo el código desde mWifi.getScanResults() hacia adelante. Tendrá que agregar una llamada al mWifi.reconnect() una vez que obtenga enableNetwork() para tener éxito.

En cuanto a la inicialización de su WifiConfiguration wc, me encantaría que considere mi publicación here. Finalmente, otra buena respuesta es here.

+0

lo tengo. es la respuesta. Gracias. –

0

intento de añadir información restante sobre la red, tales como sistemas de cifrado permitidos, esquema de clave Mangement y el PSK (si está utilizando uno)

En segundo lugar comprobar en la lista de redes configurado primero para asegurarse de que usted don Intente agregar otra red con la misma configuración ya que no tiene sentido hacer eso.

Como recomendación, no inicie Scan() y espere a que termine. Regístrese en SCAN_RESULTS_AVAILABLE_ACTION y use una devolución de llamada desde el receptor de difusión a su actividad para procesar esos resultados.

Cuestiones relacionadas