Случайное расписание Alarm Manager с календарем - PullRequest
1 голос
/ 02 августа 2010

Я пытаюсь запланировать, чтобы мой AlarmManager каждый день просыпался с различным случайным временем, которое происходит между 22:00 - 06:00.

Я пробовал эту технику, но она не работает:

 public class AlarmReciver extends BroadcastReceiver
 {
   @Override
   public void onReceive(Context context, Intent intent)
   {
     try
          {
             System.out.println(TAG+": Alert recieved"); 
             schedualeNextTimeAlarming(context);
          } catch (Exception e)
          {  
          }

 private void schedualeNextTimeAlarming(Context context)
{
       AlarmManager am = (AlarmManager) context
   .getSystemService(Context.ALARM_SERVICE); 
   Intent intent = new Intent(context, AlarmReciver.class);
   PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
    am.cancel(pi);
    getNextTime(am, pi);
 }

 private void getNextTime(AlarmManager am, PendingIntent pi)
 {
   int max = 8;
   int min = 1;
   final Random myRandom = new Random();
   int result = myRandom.nextInt(max - min) + min;
   int hourOfDay = 0;

  switch (result)
  {
    case 0:
         hourOfDay = 22;
         break;
    case 1:
         hourOfDay = 23;

        break;
    case 2:
        hourOfDay = 24;
        break;
    default:
         hourOfDay = result;

   }
   hourOfDay = 15; //for testing
  System.out.println("next time alert: "+hourOfDay+" seconds");

  Calendar cal = Calendar.getInstance();
   //  cal.add(Calendar.DAY_OF_YEAR, 1); if i disable this line, the Alarm wont work at all.
  cal.set(Calendar.HOUR_OF_DAY, 0);
  cal.set(Calendar.MINUTE, 1);
  cal.set(Calendar.SECOND, hourOfDay);
  am.cancel(pi);
  am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);

}

Я ожидаю, что каждые 15 секунд будут иметь тревогу. это вывод:

08-02 11:56:48.188: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.198: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.218: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.228: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.248: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.248: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.278: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.278: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.308: INFO/System.out(9138): InformationReceiver: Alert recieved

Как видите, каждые 15 секунд не срабатывает Тревога.

Я хочу изменить ситуацию на новое время будильника, каждый раз, когда он входит в эту функцию

будет приветствоваться любое решение или другие эффективные предложения.

Спасибо.

1 Ответ

1 голос
/ 06 августа 2013

Уже ответили Здесь .. . Для того, чтобы сначала сбросить этот будильник, вам нужно получить оригинальный экземпляр.

public void unsetAlarm(View v) {
         Intent myIntent = new Intent(MainActivity.this,
                NotificationService.class);
        notifyIntent = PendingIntent.getService(MainActivity.this, 0,
                myIntent, 0);  // recreate it here before calling cancel

        alarmManager.cancel(notifyIntent);
        Log.v(TAG, "cancelling notification");
    } 
...