2012-09-26 20 views
5

que podría estar abordar el problema de una manera incorrecta ..onActivityResult siempre devuelve 0 (RESULT_CANCELED) cuando se llama a la configuración

Lo que estoy haciendo está mostrando un mensaje de alerta cuando no hay conexión a Internet y el "ok" botón lleva al usuario a la configuración wifi para encender Internet. Lo que quiero que haga la aplicación, cuando el usuario vuelva a ella después de cambiar (o no) la configuración de Internet, es volver a cargar la aplicación o la actividad donde estaba.

Para esto yo estoy haciendo la siguiente llamada para el botón "OK":

static void startAct(Activity ctxt) 
{ 
    ctxt.startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), WIFI_SETTINGS); 

} 

de la clase de la actividad, donde se muestra este mensaje tengo el siguiente:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == WIFI_SETTINGS && resultCode == RESULT_OK) 
    { 
     this.finish(); 

     Intent myIntent = new Intent(this, MyActivity.class); 
     startActivity(myIntent); 
    } 
} 

pero resultCode siempre es 0, onActivityResult se llama justo después de presionar el botón "ok".

¿Debo abordar este problema de manera diferente? ¿Cómo puedo volver a cargar/actualizar mi aplicación cuando el usuario vuelve de la configuración wifi?

He verificado respuestas similares pero parecen utilizar una actividad dentro de la misma aplicación, por lo que pueden llamar al set_result(...), pero no puedo hacer eso aquí.

gracias!

+0

¿Por qué no acaba de comprobar 'onActivityResult', si el wifi está encendido. Independientemente del valor que devuelve. – Doomsknight

+0

Podría hacerlo, pero se llama a OnivityResult inmediatamente después de presionar el botón "ok", por lo que el usuario no tendrá tiempo de cambiar la configuración antes de que se llame. – marimaf

+0

¿Qué botón de autorización? Pensé que querías decir ok en la pantalla de configuración de Wifi. ¿El requestCode que devuelve lo mismo que WIFI_SETTINGS? – Doomsknight

Respuesta

2

Como otros han dicho que no debe llamar al final, tampoco es útil llamar al startActivityForResult. Aunque el resultCode fuera distinto de 0, la conexión a WiFi suele tardar unos segundos.

Para responder a su pregunta, debe usar un BroadcastReceiver y escuchar los intentos de cambio de red.

Este código es un poco viejo, pero aquí hay algo similar que hago en una de mis aplicaciones. Debería ayudarte a comenzar.

protected void registerWifiReceivers() 
{ 
    IntentFilter f1 = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); 
    IntentFilter f2 = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION; 
    this.registerReceiver(mReceiver, f1); 
    this.registerReceiver(mReceiver, f2);  
} 



final BroadcastReceiver mReceiver = new BroadcastReceiver() 
{  
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction();   
     Log.d (TAG, "BroadcastReceiver: " + action); 

     if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) 
     { 
     Log.i (TAG, "handling event: WifiManager.NETWORK_STATE_CHANGED_ACTION action: "+action); 
     handleWifiStateChange(intent); 
     } 
     else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) 
     { 
     Log.i (TAG, "ignoring event: WifiManager.WIFI_STATE_CHANGED_ACTION action: "+action); 
     } 
    } 
} 

protected void handleWifiStateChange (Intent intent) 
{ 
    NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);  
    if (info.getState().equals(NetworkInfo.State.CONNECTED)) 
    { 
     //do something... 
    } 

} 
+0

¡Gracias! Esto ayudó :) – marimaf

0

No cree una nueva intención. Sólo hacer esto -

finish(); 
startActivity(getIntent()); 
+0

Esto no resuelve el problema, ya que onActivityResult se llama de inmediato y el resultCode sigue siendo el mismo: 0 – marimaf

+1

en su caso, startactivityforresults puede no ser muy útil .En su lugar, solo debe verificar el regreso si el wifi está funcionando y actualizar la actividad en consecuencia. –

1

plesae no utilizan

  this.finish(); 

esto cerrará la actividad por completo. Como usaste el método startActivityForResult() deberías usar this.finish after onActivityResult() method.

+0

bien, pero eso no resuelve mi problema – marimaf

Cuestiones relacionadas