在BroadcastReceiver中每分钟更新一次通知

时间:2016-09-14 19:26:56

标签: java android broadcastreceiver

我尝试通过让线程在循环中休眠来每60秒更新一次通知。

for (int incr = 0; incr <= settingsPrefs.getInt("notifyMinutesBefore", 10); incr++) {

    PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wakeUpTag");
    wakeLock.acquire();

    if (settingsPrefs.getBoolean("runNotification" +i, true)) {

        notification.setContentText(""+timeUntilStartingInt);

        nm.notify(1000000 + i, notification.build());
        timeUntilStartingInt = timeUntilStartingInt - 1;

        try {
            Thread.sleep(60 * 1000);
        } catch (InterruptedException ignored) {
        }
    }
}

发生了什么,如果我手动打开手机屏幕,通知就不会更新,就好像wakeLock.acquire()无效。

这是每分钟更新通知的最佳方式,如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:0)

首先,要使此代码正常工作,您需要在手机进入睡眠状态之前获取唤醒锁 - 基本上在循环之外,并保持它直到循环完成。

其次,这不是正确的做法。使用带有WakefulBroadcastReceiver的AlarmManager警报更新通知并为您处理唤醒锁。