как повторить будильник через 1 день в андроиде - PullRequest
2 голосов
/ 14 ноября 2011

Я использую диспетчер будильников в своем приложении и хочу повторить будильник через один день. сигнал тревоги должен быть активирован через один день, когда вызывается один раз по времени. Пожалуйста, помогите. Заранее спасибо.

if(str_freqSchedule.equals(checkForDaily)){
            Calendar calendar = Calendar.getInstance();
            //calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR));
            calendar.set(Calendar.HOUR_OF_DAY, hr);
            calendar.set(Calendar.MINUTE, min);
            calendar.set(Calendar.SECOND,0);

            Intent intent = new Intent(this, AlarmReceiverActivity.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(
                    this.getApplicationContext(), j, intent, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),(24*60*60*1000),pendingIntent);
            j++;

        }

Ответы [ 4 ]

3 голосов
/ 25 мая 2015

Лучше использовать неточное повторение, а не setExactRepeating, учитывая потребление батареи в соответствии с документацией для Android.

      public void scheduleAlarms(AlarmManager mgr, PendingIntent pi, Context context) 
                {

                    // every day at scheduled time 
                    Calendar calendar = Calendar.getInstance();
                   // if it's after or equal 9 am schedule for next day
                   if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 9) {
                        calendar.add(Calendar.DAY_OF_YEAR, 1); 
                    }
                    calendar.set(Calendar.HOUR_OF_DAY, 9);
                    calendar.set(Calendar.MINUTE, 0);
                    calendar.set(Calendar.SECOND, 0);

              mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
    }
1 голос
/ 14 ноября 2011

Надеюсь, приведенный ниже код поможет, я использовал то же самое в своем приложении. Здесь аргумент, передаваемый в классе AlarmManager для повторения, должен быть 24 * 60 * 60 *1000* 1001 *

AlarmManager am = (AlarmManager) ct.getSystemService(Context.ALARM_SERVICE);         
Intent intent1 = new Intent(ct, TimeAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ct, 0,intent1, PendingIntent.FLAG_CANCEL_CURRENT);

Date curr=new Date();
curr.setHours(h);
curr.setMinutes(m);
c.setTime(curr);
c.set(Calendar.SECOND, 0);

Calendar c1 = Calendar.getInstance();
am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),24*60*60*1000, pendingIntent);
0 голосов
/ 28 января 2016
// Retrieve a PendingIntent that will perform a broadcast
Intent alarmIntent = new Intent(HomeContactActivity.this,
        AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(
        HomeContactActivity.this, 0, alarmIntent, 0);

AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

// Set the alarm to start at 10:00 AM
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);




manager.setRepeating(AlarmManager.RTC_WAKEUP,
        calendar.getTimeInMillis(), 86400000, // for repeating in every 24 hours
        pendingIntent);
0 голосов
/ 14 ноября 2011

Попробуйте это

AlarmManager am = (AlarmManager) ct.getSystemService(Context.ALARM_SERVICE);         
Intent intent1 = new Intent(ct, TimeAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ct, 0,intent1, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, yourtime,AlarmManager.INTERVAL_DAY, pendingIntent);
...