android - Alarmmanager - 每分钟发生火灾警报

标签 android android-widget alarmmanager

我试图在每一分钟都发出警报。但由于某种原因它不想工作。它用于小部件时钟,每分钟更新一次。出于电池原因,我制作了一个用于屏幕关闭和打开的接收器。所以我的闹钟只有在屏幕打开时才会触发。分钟应该与我的系统时钟同步。

        public static void startClockTickAlarm() {
            AlarmManager alarmManager = (AlarmManager)_context.getSystemService(Context.ALARM_SERVICE);             
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 1);       
            calendar.add(Calendar.HOUR, 1);
            alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
        }

        public static final long utcMillisNextMin() {
            Time t = new Time();
            t.setToNow();
            t.second = 0;
            t.minute++;
            System.out.println("Next Alarm: " + t.hour + ":" + t.minute + ":" + t.second);
            return t.normalize(true);
        }

我的 System.out 给了我它应该有的东西。例如,我在 11:30:15 启用小部件,返回结果是 11:31:00 - 这意味着我的闹钟应该首先在 11:31 触发。根据我的系统时钟,闹钟晚了 5-15 秒。警报过晚触发的秒数并不总是相同(5 到 15 秒之间)。

提前致谢。

最佳答案

喜欢@mighter表示,API >= 19 如果必须使用精确计时,请使用 setExact() API。

if(android.os.Build.VERSION.SDK_INT < 19) {
    alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
} else {
    alarmManager.setExact(...);
}

关于android - Alarmmanager - 每分钟发生火灾警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303165/

相关文章:

java - Android Spinner dropDownHorizo​​ntalOffset 不起作用,但 dropDownVerticleOffest 是

android - 从android中的上下文获取 Activity

android - Android 的 TabWidget 自定义样式

android - RingtonePreference 未触发 OnPreferenceChangeListener

Android如何取消AlarmManager.setAlarmClock()

android - 改造:向android中的服务器发送POST请求

android - 动态添加 TextView 到 Widget

Android 通知无法与 AlarmManager 一起正常工作

android - 具有 Intent 服务的 AsyncTask(带 AlarmManager)

java.lang.NullPointerException : Can't pass null for argument 'pathString' in child() - Error Occurs in MessagesDbRef