Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

  • Pushing notifications when app is closed - too many Activities/doesn't work
  • How do I get my app to send a notification when it is closed? - much information, but I don't know how to deal with it
  • How to send local notification android when app is closed? - much information, but I don't know how to deal with it

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

like image 777
Excel1 Avatar asked Sep 24 '16 09:09

Excel1


People also ask

Do push notifications work when app is closed iOS?

Apple does not offer a way to handle a notification that arrives when your app is closed (i.e. when the user has fully quit the application or the OS had decided to kill it while it is in the background). If this happens, the only way to handle the notification is to wait until it is opened by the user.

Does an app need to be open for push notifications?

Push notifications are small, pop-up messages sent to a user's device by a mobile app that appear even when the app isn't open. These notifications are designed to grab attention and can convey reminders, updates, promotions, and more.


2 Answers

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> 
like image 81
Vaibhav Kadam Avatar answered Sep 21 '22 08:09

Vaibhav Kadam


You can use alarm manager to do this [Not tested on latest Android versions and releases and is a pretty old answer]. Follow below steps :

  1. Use alarmmanager to create an alarm of after X seconds.

    Intent intent = new Intent(this, AlarmReceiver.class); intent.putExtra("NotificationText", "some text"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, ledgerId, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, 'X seconds in milliseconds', pendingIntent);

  2. Use a AlarmBroadCast receiver in your app.

Declare in manifest file :

<receiver android:name=".utils.AlarmReceiver">
    <intent-filter>
        <action android:name="android.media.action.DISPLAY_NOTIFICATION" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>
  1. In the broadcast receiver's on receive, you can create the notification.

    public class AlarmReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(Context context, Intent intent) {
         // create notification here
     }
    

    }

like image 23
Nikhil Gupta Avatar answered Sep 19 '22 08:09

Nikhil Gupta