Android: запускать уведомления.Билдер в определенное время

У меня есть Notification.Builder который отправляет сообщение на панель уведомлений, как только я нажимаю кнопку. Есть ли способ, чтобы уведомление появлялось в выбранное время? Я просмотрел документацию по Android, но не увидел ничего, что могло бы сработать.

Вот фрагмент кода, который у меня есть:

        Notification n = new Notification.Builder(this)
            .setContentTitle("Random title")
            .setContentText("Random text")
            .setSmallIcon(R.drawable.abc_ic_go_search_api_mtrl_alpha)
            .setContentIntent(pIntent).build();

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    notificationManager.notify(0, n);

Спасибо!

2 ответа

1) Создайте широковещательный приемник с вашим кодом уведомления.

public class AlarmReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification notification = new NotificationCompat.Builder(context)
                .setContentTitle("Random title")
                .setContentText("Random text")
                .setSmallIcon(R.drawable.abc_ic_go_search_api_mtrl_alpha)
                .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MyActivity.class), 0))
                .build();

        notificationManager.notify(0, notification);
    }
}

2) Запланируйте тревогу с помощью AlarmManager для трансляции намерения вашего широковещательного приемника

AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
// set for 30 seconds later
alarmMgr.set(AlarmManager.RTC, Calendar.getInstance().getTimeInMillis() + 30000, alarmIntent);

Используйте это, где вы хотите настроить уведомление

//Create an offset from the current time in which the alarm will go off.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 15);

//Create a new PendingIntent and add it to the AlarmManager
Intent intent = new Intent(this, MyAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,
        100, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

И показать ваше уведомление здесь

public class MyAlarmService extends Service 
{

    @Override
    public IBinder onBind(Intent arg0)
    {
        return null;
    }

    @Override
    public void onCreate() 
    { 
        super.onCreate();
    }

    @Override
    public void onStart(Intent intent, int startId)
    {
        super.onStart(intent, startId);
       // put notification code here
   }

   @Override
   public void onDestroy() 
   {
       super.onDestroy();
   }
}
Другие вопросы по тегам