簡體   English   中英

Alarmmanager-每分鍾的頂部都有火災警報

[英]Alarmmanager - Fire alarm on top of every minute

我正在嘗試在每分鍾的頂部發出一個警報。 但是由於某種原因,它並不想工作。 它是一個小部件時鍾,應每分鍾更新一次。 出於電池原因,我決定關閉屏幕再打開。 因此,僅在屏幕打開時才會觸發我的警報。 分鍾應該與我的系統時鍾同步。

        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(...);
}

docs中有以下聲明:

注意:從API 19開始,所有重復警報都是不精確的。 如果您的應用程序需要精確的交付時間,則它必須使用一次性精確警報,並如上所述每次重新安排。 targetSdkVersion早於API 19的舊版應用程序將繼續將其所有警報(包括重復警報)視為精確警報。

如果您在Android 4.4.4上運行,則可能是原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM