Как повторять уведомление ежедневно в определенное время в android через фоновое обслуживание

Привет, Я работаю над приложением, где я установил уведомление о введенных пользователем датах и ​​времени через фоновое обслуживание. Теперь я хочу настроить уведомление/будильник ежедневно в 18:00, чтобы спросить пользователя, хочет ли он добавить еще одну запись? Как я могу это достичь? Должен ли я использовать один и тот же фоновый сервис или широковещательный приемник? Пожалуйста, дайте мне лучшее решение для этого, и учебник станет отличной идеей. Спасибо заранее.

Ответы

Ответ 1

Сначала установите диспетчер аварийных сигналов ниже

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

Создайте класс широковещательного приемника "AlarmReceiver", в результате чего  уведомления, когда 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++;

    }

}

и в файле манифеста зарегистрируйте приемник для класса AlarmReceiver:

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

Для повышения событий с помощью диспетчера аварийных сигналов не требуется специальных разрешений.

Ответ 2

Ответ на N.V.Rao правильный, но не забудьте поместить тег receiver внутри тега приложения в файл AndroidManifest.xml:

<receiver android:name=".alarm.AlarmReceiver" />