web-dev-qa-db-fra.com

Envoyer une notification lorsque l'application est fermée

Comment est-il possible d'envoyer une notification par programme, lorsque l'application est complètement fermée? 

Exemple: l'utilisateur a fermé l'application, également dans Android Taskmanager, et a attendu. L'application doit envoyer une notification après X secondes ou lorsque l'application vérifie les mises à jour.

J'ai essayé de travailler avec ces exemples de code mais:

Si vous le pouvez, essayez de l'expliquer à l'aide d'un exemple, car les débutants (comme moi) peuvent apprendre plus facilement de cette façon.

6
Excel1

Vous pouvez utiliser ce service. Tout ce que vous avez à faire est de démarrer ce service onStop () dans le cycle de vie de votre activité. Avec ce code: startService(new Intent(this, NotificationService.class)); vous pouvez alors créer une nouvelle classe Java et y coller ce code:

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();

                    }
                });
            }
        };
    }
}

Après cela, il vous suffit de combiner le service avec le fichier 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>
2
Vaibhav Kadam

Vous pouvez utiliser le gestionnaire d’alarmes pour ce faire . Suivez les étapes ci-dessous:

1) Utilisez alarmmanager pour créer une alarme après X secondes.

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) Utilisez un récepteur AlarmBroadCast dans votre application.

Déclarez dans le fichier manifeste:

<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>

3) Dans la réception du récepteur de radiodiffusion, vous pouvez créer la notification.

public class AlarmReceiver extends BroadcastReceiver {

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

Vous pouvez vérifier les applications actives à l'aide du service et afficher des notifications si l'activité n'est pas en cours d'exécution.

0
Adarsh