Search code examples
androidalarmmanager

What this code does? and Why my alarm is not stopped?


Intent in2 = new Intent(context, ReminderService.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, in2, 0);
AlarmManager alarmManager2 = (AlarmManager)context.getSystemService(context.ALARM_SERVICE);
alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (5 * 1000), 0, pendingIntent2);

and the reminderservice.java include the following code

public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Context context = getApplicationContext();
    Intent in = new Intent(this, RemindBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, in, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (5 * 1000), 1000, pendingIntent);
}

Solution

  • First of all I suggest you to just use only RemindBroadcastReceiver. There isn't any need of ReminderService

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (5 * 1000), 1000, pendingIntent);
    

    Here you have set repeated alarm which triggered after every 1 second. You need to use alarmManager.set instead of alarmManager.setRepeating.

    I think bellow code will be helpful for you:

     /------------------- CALLING PART
            Intent in2 = new Intent("MY_ALARM_ACTION");
            PendingIntent pendingIntent2 = PendingIntent.getBroadcast(this, 0, in2, 0);
            AlarmManager alarmManager2 = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
            //alarmManager2.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (5 * 1000), pendingIntent2);
           alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP,
                System.currentTimeMillis() + (5 * 1000), AlarmManager.INTERVAL_DAY, pendingIntent2);
    }
    /-------------------
    
    
    
    /-------------------------- RemindBroadcastReceiver ----------------
        public class RemindBroadcastReceiver extends BroadcastReceiver
        {
            @Override
            public void onReceive(Context context, Intent intent)
            {
                if (intent.getAction() == "MY_ALARM_ACTION")
                {
                    // TODO Enter your code here
                }
            }
        }