gpt4 book ai didi

Android SDK - 设置具有相同 Intent 不同附加功能的多个警报

转载 作者:太空狗 更新时间:2023-10-29 14:50:52 25 4
gpt4 key购买 nike

我试图让 2 个重复的警报触发相同的 Intent 但具有不同的额外功能:

// first alarm @ 2AM
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.HOUR_OF_DAY, 2);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);

// second alarm @ 3AM
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.HOUR_OF_DAY, 3);
calendar2.set(Calendar.MINUTE, 0);
calendar2.set(Calendar.SECOND, 0);

// Set both intents with differing extras
Intent intent1 = new Intent(context, Receiver.class);
intent1.putExtra("status", true);
Intent intent2 = new Intent(context, Receiver.class);
intent2.putExtra("status", false);

// Set both pending Intents with differint ids
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 1, intent1, 0);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 2, intent2, 0);

AlarmManager alarm1 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm1.setRepeating(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent1);
AlarmManager alarm2 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm2.setRepeating(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent2);

Intent 触发了什么

public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyApp", "Received intent with status : " + intent.getBooleanExtra("status", false));
}
.....
}

但由于一个奇怪的原因,两个 Intent 都在凌晨 3 点左右被触发:

Received intent with status : false

Received intent with status : true

我做错了什么?

最佳答案

问题是 AlarmManager.setRepeative 与官方文档中所写的不准确。

我在凌晨 2:50 开始我的程序,所以使用上面的代码,第一个警报应该在 50 分钟前开始,所以它需要被触发,但由于另一个警报安排在 31M,Android 操作系统决定等待凌晨 3 点触发两者的警报(我猜是为了降低电池消耗)。

解决方案是在需要时为警报添加 24 小时,以确保将它们安排在未来而不是过去,并使用准确但不重复的 AlarmManager.setExact。然后每天重新安排一个新的 AlarmManager.setExact

如果您需要高于 1 小时的准确性,我建议永远不要使用 AlarmManager.setRepeative

关于Android SDK - 设置具有相同 Intent 不同附加功能的多个警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com