gpt4 book ai didi

java - 由 Alarm Manager 触发的 Pending Intent 似乎会立即触发

转载 作者:太空狗 更新时间:2023-10-29 16:15:26 27 4
gpt4 key购买 nike

我已经设置了一个警报管理器,它应该在一天中的特定时间触发一个待处理的 Intent。

我将代码放在主 Activity 的 onCreate() 方法中,因为我认为这是放置它的最佳位置?

代码如下:

    Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 4); // trigger at 4am in the morning
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

final Intent updateIntent = new Intent(Intent.ACTION_MAIN, null);
updateIntent.addCategory(Intent.CATEGORY_HOME);
final ComponentName cn = new ComponentName(
"com.example.myotherapp",
"com.example.myotherapp.MainActivity");
updateIntent.setComponent(cn);
updateIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(), 0, updateIntent, 0);

AlarmManager alarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent); // launch at 4am, then every day (24 hours)

Alarm Manager 有效,我可以看到它在指定的时间触发,但似乎只要这个基础应用程序启动,Pending Intent 就会触发。

是什么导致 Intent 立即触发?我怎样才能阻止它这样做?

最佳答案

你的问题在这里:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 4); // trigger at 4am in the morning
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

calendar.getTimeInMillis() 将返回当前时间戳 (System.currentTimeMillis()) 之前的时间戳,因此 Alarm 会立即触发。

解决您的问题:

long triggerTime = calendar.getTimeInMillis();
if (triggerTime <= System.currentTimeMillis() + 3000)
{
// 3 Second distance

calendar.add(Calendar.DATE, 1); // Add 1 day --> Trigger 1 day later from now
}

如果您总是想在 1 天后的凌晨 4 点启动闹钟。您可以删除条件并这样做:

calendar.add(Calendar.DATE, 1); // Add 1 day --> Calendar time will be tomorrow 4am

alarm.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);

关于java - 由 Alarm Manager 触发的 Pending Intent 似乎会立即触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29542067/

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