2017-02-25 57 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操作筛选