2017-02-25 64 views
1

我嘗試設置一個Android應用程序。這必須每週星期五15.00/3.00點通過我的證明。此時每天設置通知是沒有問題的,但即使不是在特定的日期和時間。android通知每週

我希望你找到我的錯誤,並可以給我一些提示。在這裏我的代碼:

private void alarmMethod(){ 
    Intent myIntent = new Intent(this , NotifyService.class); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    pendingIntent = PendingIntent.getService(this, 0, myIntent, 0); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.HOUR, 3); 
    calendar.set(Calendar.AM_PM, Calendar.PM); 
    calendar.add(Calendar.DAY_OF_MONTH, 1); 
    calendar.set(Calendar.DAY_OF_WEEK, 6); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, pendingIntent); 

謝謝問候

回答

0

對於重複報警(setRepeating,setInexactRepeating),你應該建立在未來的時間(如果您指定的觸發時間是在過去,警報立即觸發)。所以,如果你在每個星期五需要報警首先你768,16計算下週五:

private void alarmMethod() { 
    Intent myIntent = new Intent(this , NotifyService.class); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    pendingIntent = PendingIntent.getService(this, 0, myIntent, 0); 

    // get current time 
    Calendar currentTime = Calendar.getInstance(); 

    // setup time for alarm 
    Calendar alarmTime = Calendar.getInstance(); 

    // set time-part of alarm 
    alarmTime.set(Calendar.SECOND, 0); 
    alarmTime.set(Calendar.MINUTE, 0); 
    alarmTime.set(Calendar.HOUR, 3);  
    alarmTime.set(Calendar.AM_PM, Calendar.PM); 
    alarmTime.set(Calendar.DAY_OF_WEEK, Calendar.Friday); 

    // check if it in the future 
    if (currentTime.getTimeInMillis() < alarmTime.getTimeInMillis()) { 
     // nothing to do - time of alarm in the future 
    } else {    
     int dayDiffBetweenClosestFriday = (7 + alarmaTime.get(Calendar.DAY_OF_WEEK) - calendar.get(Calendar.DAY_OF_WEEK)) % 7; 

     if (dayDiffBetweenClosestFriday == 0) { 
      // Today is Friday, but current time after 3pm, so schedule for the next Friday 
      dayDiffBetweenClosestFriday = 7; 
     } 

     alarmTime.add(Calendar.DAY_OF_MONTH, dayDiffBetweenClosestFriday); 
    } 

    // calculate interval (7 days) in ms 
    int interval = 1000 * 60 * 60 * 24 * 7; 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), interval, pendingIntent); 
} 

你也應該會自動在用戶重新啓動設備(默認情況下重新啓動重複報警,所有警報被取消當器件關下):

  • 坐落在項值許可應用程序的清單
  • 實現一個BroadcastReceiver接收廣播android.intent.action.BOOT_COMPLETED
  • 添加接收到你的應用程序的清單文件與意圖過濾器,在ACTION_BOOT_COMPLETED操作篩選