Alex Rivera | Logout

Android: Network Radio off before ACTION_SHUTDOWN event.Events order Changed in ICS

Asked 2012-07-17T06:54:43.903
20

I was sending logout to my server when user did a power off on the device.The order of events in 2.3 and 4.0.3 are as follows.So now Log out is Failed.
Device : Samsung Galaxy s2


Android : 2.3


1)Receive ACTION_SHUTDOWN
2) Send Logout event,sleep for 5 secs,LOG OUT SENT SUCCESSFULLY
3)Data Network Radio off event.
4)Device Power off.


Android : 4.0.3


1) Data Network Radio off event.
2)Receive ACTION_SHUTDOWN
3) Send Logout event,LOG OUT FAIL As Network is down.
Any way around to get ACTION_SHUTDOWN before Data Network Radio off?

Edit
Report

1 Answer

0

Create a service that receives the broadcast for the shutdown like this:

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 ++");        
    }
}

In your AndroidManifest.xml, embed this fragment below within the <application> tags:

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

From your app's activity register a broadcast receiver with the appropriate filter for 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();
            }
        }
    }
}
answered 2012-07-26T01:02:20.467

Your Answer