Java 安卓每周通知

Java 安卓每周通知,java,android,Java,Android,我尝试设置一个Android应用程序。这必须通知我每周星期五下午15:00/3:00。每天在这个时候设置通知没有问题,但即使在特定的日期和时间也没有问题 我希望你能发现我的错误并给我一些提示。这是我的代码: private void alarmMethod(){ Intent myIntent = new Intent(this , NotifyService.class); AlarmManager alarmManager = (AlarmManager)getSystemS

我尝试设置一个Android应用程序。这必须通知我每周星期五下午15:00/3:00。每天在这个时候设置通知没有问题,但即使在特定的日期和时间也没有问题

我希望你能发现我的错误并给我一些提示。这是我的代码:

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

Tim

对于重复报警(setRepeating,setInexactRepeating),您应该在将来设置时间(如果您指定的触发时间是过去的,则报警会立即触发)。因此,如果您需要在每个星期五报警,首先您应该计算下周五:

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);
}
private void报警方法(){
Intent myIntent=newintent(这是NotifyService.class);
AlarmManager AlarmManager=(AlarmManager)getSystemService(报警服务);
pendingent=pendingent.getService(this,0,myIntent,0);
//获取当前时间
Calendar currentTime=Calendar.getInstance();
//报警设置时间
Calendar alarmTime=Calendar.getInstance();
//设置警报的时间部分
alarmTime.set(日历秒,0);
alarmTime.set(日历分钟,0);
alarmTime.set(日历小时,3);
alarmTime.set(Calendar.AM\u PM,Calendar.PM);
alarmTime.set(Calendar.DAY\u OF_WEEK,Calendar.Friday);
//检查是否在将来使用它
if(currentTime.getTimeInMillis()
此外,如果用户重新启动设备,您应该自动重新启动重复报警(默认情况下,设备关闭时所有报警都会取消):

  • 在应用程序清单中设置“接收启动完成”权限
  • 实现BroadcastReceiver以接收广播android.intent.action.BOOT\u已完成
  • 使用意图过滤器将接收器添加到应用程序的清单文件中,该过滤器在操作\u引导\u完成的操作上进行过滤

先生,您能详细介绍一下BroadcastReceiver for BOOT_COMPLETED和ACTION_BOOT_COMPLETED的详细信息吗。如果可能的话,我可以问一下代码吗?谢谢你-这是一个很好的教程