2012-05-04 11 views
0

これは、毎週のユーザからの入力として時間がかかり、それに応じて青い歯のデバイスをオン/オフする「日付」に関係なく、それぞれの日。つまり、コードは日、時、分のみをチェックする必要があります。私は次のコード(今日の金曜日、すなわち金曜日のテスト目的)を使用しましたが、アラームをトリガーしません。アラームを消すために曜日を設定してチェックする方法 - Android

//..........setting calender for MyAlarmService 
     Calendar cur_cal = new GregorianCalendar(); 
     cur_cal.setTimeInMillis(System.currentTimeMillis()); 
     Calendar cal = new GregorianCalendar(); 
     cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR)); 
     cal.set(Calendar.HOUR_OF_DAY, 11); 
     cal.set(Calendar.MINUTE, 5); 
     cal.set(Calendar.SECOND, 0); 
     cal.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND)); 
     cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE)); 
     cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH)); 
     // here it m setting the "Today" 
     cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 

     Intent myIntent = new Intent(AndroidAlarmService.this, MyAlarmService.class); 
     pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0); 
     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

私は声明 cal.set(Calendar.DAY_OF_WEEKの、Calendar.FRIDAY)を削除します。

アラームサービスは、私が間違って何をやっている

11:05すなわち、上記specifed時間で完全に「今日」をトリガー?

答えて

0

次のような回避策が見つかりました。

//..........setting calender for Friday 


     Calendar calFri = new GregorianCalendar(); 
     calFri.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR)); 
     calFri.set(Calendar.HOUR_OF_DAY, friHrInt); 
     calFri.set(Calendar.MINUTE,friMinInt); 
     calFri.set(Calendar.SECOND, 0); 
     calFri.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND)); 
     calFri.set(Calendar.DATE, cur_cal.get(Calendar.DATE)); 
     calFri.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH)); 

     days = 13 - calFri.get(Calendar.DAY_OF_WEEK); // how many days until Sunday 
     calFri.add(Calendar.DATE, days); 

    //..........setting calender for Saturday 


     Calendar calSat = new GregorianCalendar(); 
     calSat.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR)); 
     calSat.set(Calendar.HOUR_OF_DAY, satHrInt); 
     calSat.set(Calendar.MINUTE,satMinInt); 
     calSat.set(Calendar.SECOND, 0); 
     calSat.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND)); 
     calSat.set(Calendar.DATE, cur_cal.get(Calendar.DATE)); 
     calSat.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH)); 

     days = 14 - calSat.get(Calendar.DAY_OF_WEEK); // how many days until Sunday 
     calSat.add(Calendar.DATE, days); 

//.........................The Following will make the alarm go off on friday...................................... 


      Intent myIntentFri = new Intent(AndroidAlarmService.this, FriOffAlarmService.class); 
      pendingIntentFri = PendingIntent.getService(AndroidAlarmService.this, 0, myIntentFri, 0); 
      AlarmManager alarmManagerFri = (AlarmManager)getSystemService(ALARM_SERVICE); 
      //alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent2); 
      alarmManagerFri.setRepeating(AlarmManager.RTC_WAKEUP, calFri.getTimeInMillis(),interval, pendingIntentSun); 

      //.........................The Following will make the alarm go off on saturday...................................... 


      Intent myIntentSat = new Intent(AndroidAlarmService.this, SatOffAlarmService.class); 
      pendingIntentSat = PendingIntent.getService(AndroidAlarmService.this, 0, myIntentSat, 0); 
      AlarmManager alarmManagerSat = (AlarmManager)getSystemService(ALARM_SERVICE); 
      //alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent2); 
      alarmManagerSat.setRepeating(AlarmManager.RTC_WAKEUP, calSat.getTimeInMillis(),interval, pendingIntentSat); 
+0

を次のように私はこのロジックは、私のために働いたが、すべての日のための新しいサービスを開始しているこれら日間の区切りアラームサービスを使用するにはあまりにも原始的なプログラミングの練習です。任意の提案plz – learner

関連する問題