【问题标题】:Can my AlarmManager fire the first alarm, when the set time is reached, not after the first repeating?当达到设定时间时,我的 AlarmManager 能否触发第一个警报,而不是在第一次重复之后?
【发布时间】:2020-01-20 14:09:16
【问题描述】:

对于我的应用程序,我想在午夜发出警报,并在下一个午夜定期发出警报以重置一些变量。我尝试了警报管理器来实现这一点。警报是否有可能在第一次到达午夜时触发,而不仅仅是在接下来的午夜? 我的实际代码正在运行,但不是我想要实现的。我现在设置时间并将重复时间设置为 60 秒以进行测试。

在我的日志输出中,我得到例如:

  • 20.01.2020_14:15:00 我要报警
  • 20.01.2020_14:16:00:警报
  • 20.01.2020_14:17:00:警报

那么,当警报到达设定时间时,是否可以在第一时间直接触发警报?或者有人有解决方法或任何提示或提示我可以如何实现这一目标?

我设置闹钟的功能

public void midnightAlarm() {
 AlarmManager alarmMgr;
        PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);


        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 15);
        calendar.set(Calendar.MINUTE, 15);


        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                1000 * 60 , alarmIntent);

    }

我的接收者类:

public class MidnightAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           writeToFile("ALARM");
           //reset my Variables

    }
}

【问题讨论】:

  • 解决了,我现在使用单发 AlarmManager 并在触发后重置它

标签: android alarmmanager repeatingalarm


【解决方案1】:
public void midnightAlarm() {

         AlarmManager alarmMgr;
         PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);


        // Set the alarm to start at 8:30 a.m.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);



        alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);


    }

接收者

public class MidnightAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           GlobalVariables.writeToFile("ALARM");
           midnightAlarmREDO(context);
    }



    public void midnightAlarmREDO(Context context) {

        AlarmManager alarmMgr;
        PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// zeit neu berechnen

        alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() +
                        60 * 1000, alarmIntent);


    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2014-02-23
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多