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