2010-08-02 2 views
1

Я пытаюсь настроить мой 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 secodns плохо иметь тревогу. это выход:

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 секунд.

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

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

Спасибо.

+1

Было бы очень полезно знать, что это такое, что не работает. Есть ли исключение, нет ли тревоги? – Janusz

+0

Существует тревога, проблема в том, что он не отключает preivouse Alaram .. хотя я и делаю cancle. Также Alaram просыпается неправильно, плохо отредактируйте код с выходом – Moshik

ответ

1

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

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"); 
    } 
Смежные вопросы