Search code examples
androidandroid-intentalarmmanagerandroid-calendar

How to set a PendingIntent at the AlarmManager for a specific time?


I want to send a Broadcast at an specific time a day. I wrote some code, but the Calendar returns a wrong Date and the Broadcast does an infinite Loop. What have I done wrong?

Boolean static1Active = prefs.getBoolean("static_switch1", true);
    Log.i("HHG", "Static1? " + (INTENT_TYP.equals("static1") && static1Active));
    if(INTENT_TYP.equals("static1") && static1Active){
        String check_time1 = prefs.getString("check_time1", "6:0");
        String[] pieces=check_time1.split(":");
        Integer hour = Integer.parseInt(pieces[0]);
        Integer minute = Integer.parseInt(pieces[1]);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, Calendar.MONTH, Calendar.DATE, hour, minute);
        Log.i("HHG","Calendar: " +calendar.getTime());

        Intent static1 = new Intent(context, VertretungCheck.class);
        static1.putExtra("typ", "static1");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, static1, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    }

Solution

  • The right code is this:

            Calendar calendar = Calendar.getInstance();
            calendar.getTime();
            calendar.add(Calendar.DAY_OF_MONTH, 1);
            calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),   calendar.get(Calendar.DAY_OF_MONTH), hour, minute);