Search code examples
androidandroid-datepickerandroid-timepicker

How to set alarm for particular date in android?


Hi I need to set alarm for particular date by using time picker.When I given static input,alarm is not setting properly and ringing. for eg: I am giving static input(with date,month and year), but it's not ringing. Here is my code.

  //button click
private OnClickListener reminderEventListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        openTimePickerDialog(false);
    }
  private void openTimePickerDialog(boolean is24r) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH,1);//month
        calendar.set(Calendar.YEAR,2015);//year
        calendar.set(Calendar.DAY_OF_MONTH,12);//day
         timePickerDialog = new TimePickerDialog(
                EventDetail.this, 
                onTimeSetListener, 
                calendar.get(Calendar.HOUR_OF_DAY), 
                calendar.get(Calendar.MINUTE), 
                is24r);
        timePickerDialog.setTitle(eventDates+" "+days+","+eventYear);  

        timePickerDialog.show();
    }
    OnTimeSetListener onTimeSetListener
    = new OnTimeSetListener(){

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            Calendar calNow = Calendar.getInstance();
            Calendar calSet = (Calendar) calNow.clone();
            calSet.set(Calendar.MONTH,1);//month
            calSet.set(Calendar.YEAR,2015);//year
            calSet.set(Calendar.DAY_OF_MONTH,12);//day
            calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
            calSet.set(Calendar.MINUTE, minute);
            calSet.set(Calendar.SECOND, 0);
            calSet.set(Calendar.MILLISECOND, 0);

            if(calSet.compareTo(calNow) <= 0){
                //Today Set time passed, count to tomorrow
                calSet.add(Calendar.DATE, 1);
            }

            setAlarm(calSet);
        }

        private void setAlarm(Calendar targetCal) {
            // TODO Auto-generated method stub
            Log.e("Give input", "12/01/2015");
            Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, intent, 0);
            AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);

        }};
};
AlarmReceiver:

 public class AlarmReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
     NotificationManager manager =    (NotificationManager)context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
        Notification noti = new Notification(android.R.drawable.stat_notify_more, "Wake up alarm", System.currentTimeMillis());
        noti.setLatestEventInfo(context, "My Alarm", "WAKE UP...!!!", sender);
        noti.flags = Notification.FLAG_AUTO_CANCEL;
        manager.notify(R.string.app_name, noti); 

        //intent to call the activity which shows on ringing
        Intent myIntent = new Intent(context, EventDetail.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myIntent);

        //display that alarm is ringing
        Toast.makeText(context, "Alarm Ringing...!!!", Toast.LENGTH_LONG).show();
        Log.e("Alarm ringing", "alarm ringing"); 

}

   I set particular time and tested.alarm is not triggering.
  I have given permission in manifest too.
   <receiver android:name=".AlarmReceiver" android:process=":remote" />

Solution

  • try to put MONTH as 0, not 1, it will ring, MONTHS are numbered from 0, no idea why is there this exception.

    Also I don't know how getting time in millis is working. Try that too:

    long time = calSet.getTime().getTime();
    

    And then put time in alarmManager.set().