views:

34

answers:

0

I'm trying to schedule my AlarmManager to wake up every day with a diffrent random time which occurs between 22:00 - 06:00.

I've tried this technic, but it doesnt seems to work:

 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);

}

my expected result is, that every 15 secodns ill have an alarm. this is the output:

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

As you can see, it doesnt Alarm every 15 seconds.

I wanna achive the situation of re-scheduale a new Alarm time, every time it gets into this function

any solution or other effective suggestions would be very welcome.

Thanks.