安卓|每天同一时间设置闹钟 |不工作

标签 android alarmmanager

在我的 Android 应用程序中,我会在每天凌晨 3 点启动一个命令,并使用 AlarmManagersetRepeating。当应用程序启动时,我这样做:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Intent intent = new Intent(context, MyBroadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

这是MyBroadcast:

public class MyBroadcast extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.d("ALARM","Alarm worked.");
    }
}

购买,而不是在 3 处运行命令,应用会立即运行命令。为什么?

最佳答案

当闹钟设置为已过日期时,它将立即触发,如果您不希望您可以创建一些逻辑以仅在当前时间早于凌晨 3 点时才在今天启动它,像这样的方法会起作用:

    Calendar now = Calendar.getInstance();
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 3);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    Intent intent = new Intent(context, MyBroadcast.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (now.before(cal)) {
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
    } 
    else {
        cal.set(Calendar.DAY_OF_YEAR, now.get(Calendar.DAY_OF_YEAR) +1);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);   
    }

我们创建了另一个日历作为当前时间的引用,并检查我们是否在凌晨 3 点之前,如果不是,则仅在一天后调用闹钟。

关于安卓|每天同一时间设置闹钟 |不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844753/

相关文章:

android - 如何防止搜索按钮关闭 AlertDialog?

android - 如何在 Android 中解析网页内容

java - 在我的应用程序中获取 java.lang.ClassCastException

android - 本地通知问题

android - 如何使用 AlarmManager 有效跟踪警报计数

android - 使用 Alarmmanager 在特定时间启动服务

android - 无论设置什么时间,AlarmManager 的 setRepeating() 都会在 1 分钟后重复(本例中为 5 秒,API 18+)

javascript - PhoneGap 电子邮件插件

android - AlarmManager 警报立即触发

Android 以编程方式删除 Chrome/默认浏览器 cookie、历史记录、搜索