Excel1 Excel1 - 2 months ago 18
Android Question

Send a notification when the app is closed

How is it possible to send a notification programmatically, when the App got completely closed?

Example: The User closed the App, also in the Android Taskmanager, and waits. The App should send a notification after X Seconds or when the App check for Updates.

I tried to work with these code examples but:



If you can, try to explain it at an example, because beginners (like me) can easier learn it this way.

Answer

You can use this service all you need to do is Start this service onStop() in your activity lifecycle. With this code: startService(new Intent(this, NotificationService.class)); then you can create a new Java Class and paste this code in it:

public class NotificationService extends Service{

Timer timer;
TimerTask timerTask;
String TAG = "Timers";
int Your_X_SECS = 5;


@Override
public IBinder onBind(Intent arg0)
{
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId){
    Log.e(TAG, "onStartCommand");
    super.onStartCommand(intent, flags, startId);

    startTimer();

    return START_STICKY;
}


@Override
public void onCreate(){
    Log.e(TAG, "onCreate");


}

@Override
public void onDestroy(){
    Log.e(TAG, "onDestroy");
    stoptimertask();
    super.onDestroy();


}

//we are going to use a handler to be able to run in our TimerTask
final Handler handler = new Handler();


public  void startTimer() {
    //set a new Timer
    timer = new Timer();

    //initialize the TimerTask's job
    initializeTimerTask();

    //schedule the timer, after the first 5000ms the TimerTask will run every 10000ms
     timer.schedule(timerTask, 5000, Your_X_SECS*1000); //
    //timer.schedule(timerTask, 5000,1000); //
}

public void stoptimertask() {
    //stop the timer, if it's not already null
    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

public void initializeTimerTask() {

    timerTask = new TimerTask() {
        public void run() {

            //use a handler to run a toast that shows the current timestamp
            handler.post(new Runnable() {
                public void run() {

                    //TODO CALL NOTIFICATION FUNC
                    YOURNOTIFICATIONFUNCTION();

                }
            });
        }
    };
}

}

After this you only need to combine the service with the manifest.xml:

<service
            android:name=".NotificationService"
            android:label="@string/app_name"
            <intent-filter>
                <action android:name="your.app.domain.NotificationService" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
Comments