具有日历的警报管理器的随机计划

时间:2010-08-02 07:08:16

标签: android alarmmanager

我正在尝试安排我的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 个答案:

答案 0 :(得分: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");
    }