2012-07-17 16 views
20

Estaba enviando el cierre de sesión a mi servidor cuando el usuario apagó el dispositivo. El orden de los eventos en 2.3 y 4.0.3 es el siguiente. Así que ahora Log out is Failed.
Dispositivo: Samsung Galaxy S2Android: Radio de red desactivada antes del evento ACTION_SHUTDOWN. Orden de eventos Modificado en ICS


Android: 2,3


1) Recibir ACTION_SHUTDOWN
2) Enviar evento Salir, dormir durante 5 segundos, LOG OUT enviado con éxito
3) Datos Network Radio off event.
4) Dispositivo apagado.


Android: 4.0.3


1) Datos de la red de radio de evento.
2) Reciba ACTION_SHUTDOWN
3) Evento de cierre de sesión de envío, FALLO DE SALIDA Como la red ha caído.
¿Hay alguna forma de desactivar ACTION_SHUTDOWN antes de apagar la red de radio de datos?

Respuesta

0

¿Has probado a usar un servicio para eso? Puede registrar un servicio que se esté ejecutando continuamente para que cuando reciba onDestroy() sepa que su aplicación está siendo eliminada y realice esa solicitud de cierre de sesión.

Solo una idea. No sé si el servicio onDestroy() se llama antes de que la red se apague, pero lo intentaría por si acaso.

0

crear un servicio que recibe la emisión de la parada de esta manera:

public class MyAppShutdown extends BroadcastReceiver{ 
    private static final String TAG = "MyAppShutdown"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.v(TAG, "onReceive - ++ ENTER ++"); 
     if (intent != null && intent.getAction().equals(Intent.ACTION_SHUTDOWN)){ 
      Log.v(TAG, "onReceive - ***] SHUTDOWN [***"); 
      // perhaps send a broadcast to your app via intent to perform a log out. 
      Intent intent = new Intent(); 
      intent.addAction("intent.myapp.action.shutdown"); 
      sendBroadcast(intent); 
     } 
     Log.v(TAG, "onReceive - ++ LEAVE ++");   
    } 
} 

En su AndroidManifest.xml, insertar este fragmento a continuación dentro de los <application> etiquetas:

<receiver android:name=".MyAppShutdown"> 
    <intent-filter> 
     <action android:name="android.intent.action.SHUTDOWN"/> 
    </intent-filter> 
</receiver> 

De la actividad de su aplicación para registrar una receptor de difusión con el filtro apropiado para intents:

public class myApp extends Activity{ 
    private myAppBroadcastRcvr myAppRcvr = new myAppBroadcastRcvr(); 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("intent.myapp.action.shutdown"); 
     registerReceiver(myAppRcvr, filter); 
    } 
    // Perhaps you have this 
    private void LogOff(){ 
    } 
    class myAppBroadcastRcvr extends BroadcastReceiver{ 
     @Override 
     public void onReceive(Context context, Intent intent){ 
      if (intent.getAction().equals("intent.myapp.action.shutdown")){ 
       LogOff(); 
      } 
     } 
    } 
} 
+0

Oklets supone que llamo a LogOff(). Como la plataforma de red de radio está desactivada, no puedo enviar datos !!! – NitZRobotKoder

+0

¡Sí! De alguna manera me di cuenta después de volver a leer tu pregunta ... estoy sorprendido, no puedo creer que android lo haya cambiado, habría pensado que la radio es lo último que se apaga, disculpa por la publicación incoherente ya que no es lo que estás buscando para ... – t0mm13b

+0

eso está bien !! Sí, ¡¡extraño por qué se cambió el comportamiento !! – NitZRobotKoder

1

No se parece al comportamiento vainilla de Android. Puede ser que el fabricante de su dispositivo haya realizado algunas mejoras internas en el proceso de apagado para acelerarlo.

Puede ver cómo se maneja el apagado en frameworks/base/services/java/com/android/server/pm/ShutdownThread.java#L296 en la rama maestra actual.

Sin embargo, como desarrollador de aplicaciones móviles no debe confiar en una conexión de red constante.

Cuestiones relacionadas