web-dev-qa-db-fra.com

Comment répéter la notification quotidiennement à une heure précise dans Android via le service en arrière-plan

Salut, je travaille sur l'application où j'ai défini la notification sur la date et l'heure entrées par l'utilisateur via le service en arrière-plan. Maintenant, je veux définir une notification/alarme quotidiennement à 18 h pour demander à l'utilisateur s'il veut ajouter une autre entrée? Comment puis-je atteindre cet objectif? Dois-je utiliser le même service d'arrière-plan ou le même récepteur de diffusion? Veuillez me donner une meilleure solution pour cela et le tutoriel sera une excellente idée. Merci d'avance.

24
user3458918

Réglez d'abord le gestionnaire d'alarmes comme ci-dessous

 Calendar calendar = Calendar.getInstance();
 calendar.set(Calendar.HOUR_OF_DAY, 18);
 calendar.set(Calendar.MINUTE, 30);
 calendar.set(Calendar.SECOND, 0);
 Intent intent1 = new Intent(MainActivity.this, AlarmReceiver.class);
 PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,intent1, PendingIntent.FLAG_UPDATE_CURRENT);
 AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE);
 am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

Créez une classe de récepteur de diffusion "AlarmReceiver" dans cette augmentation des notifications lorsque onReceive

public class AlarmReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        long when = System.currentTimeMillis();
        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);

        Intent notificationIntent = new Intent(context, EVentsPerform.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);


        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
                context).setSmallIcon(R.drawable.applogo)
                .setContentTitle("Alarm Fired")
                .setContentText("Events to be Performed").setSound(alarmSound)
                .setAutoCancel(true).setWhen(when)
                .setContentIntent(pendingIntent)
                .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
        notificationManager.notify(MID, mNotifyBuilder.build());
        MID++;

    }

}

et dans le fichier manifeste, enregistrez le récepteur pour la classe AlarmReceiver:

<receiver Android:name=".AlarmReceiver"/>

Aucune autorisation spéciale n'est requise pour déclencher des événements via le gestionnaire d'alarmes.

58
Mr. N.V.Rao

La réponse de N.V.Rao est correcte, mais n'oubliez pas de mettre la balise receiver à l'intérieur de la balise d'application dans le fichier AndroidManifest.xml:

<receiver Android:name=".alarm.AlarmReceiver" />
3
tommy