Notifications in specific time every day android

非 Y 不嫁゛ 提交于 2019-11-27 12:15:02
Devangi Desai

Use alarm manager and put your notification in NotifyService class

Intent myIntent = new Intent(Current.this , NotifyService.class);     
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
pendingIntent = PendingIntent.getService(ThisApp.this, 0, myIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY , pendingIntent);  //set repeating every 24 hours

I know this is an old question but I had a similar requirement and this is what I did. I found the difference between the current system time and the intended time for sending notification in millis and implemented a runnable inside an android service. The below code will come in the Notifyservice.

private Handler notificationTimer = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if(msg.what==0) {
                sendNotifications();
        }
        super.handleMessage(msg);
    }
};
private Runnable notificationCaller = new Runnable() {

    @Override
    public void run() {
        Message msg = notificationTimer.obtainMessage();
        msg.what = 0;
        notificationTimer.sendMessage(msg);
    }
};        


    Calendar calendar = Calendar.getInstance();
    Calendar timefornotification = Calendar.getInstance();
    timefornotification.set(Calendar.HOUR_OF_DAY, 12);
    timefornotification.set(Calendar.MINUTE, 30);
    timefornotification.set(Calendar.SECOND, 00);

    Long difference = calendar.getTimeInMillis() - timefornotification.getTimeInMillis();

    if(difference<0){
        notificationTimer.postDelayed(notificationCaller, -(difference));
    }
    else{
        notificationTimer.postDelayed(notificationCaller, difference);
    }

   public void sendNotifications(){
        ------Your code here-------
        notificationTimer.removeCallbacksAndMessages(null);
        notificationTimer.postDelayed(notificationCaller, 86400000);
        ------86400000 is one day. So it will repeat everyday-------
   }

You can then call a service from main class to run this in background.

   Intent service = new Intent(this, NotifyService.class);
    this.startService(service);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!