gpt4 book ai didi

android - 每天在特定时间运行代码 - AlarmManager

转载 作者:行者123 更新时间:2023-11-29 15:37:03 24 4
gpt4 key购买 nike

目前,我正在尝试在特定时间运行一段代码。经过一些研究,我认为正确的方法是使用 AlarmManger。代码应在每天凌晨 3 点执行。如果手机在凌晨3点关机,则应该在开机后直接执行代码。

我用谷歌搜索并找到了很多结果。但是我的代码无法正常工作。

昨天我收到通知。通知时间是晚上10点。但在代码中,时间设置为凌晨 3 点。这段时间我设置了很多警报管理器(因为测试)。有没有可能触发的 AlarmManager 是旧的?注意:在设置新的 AlarmManager 之前,我从手机中删除了完整的应用程序并重新安装了它。 (我认为这会删除所有设置的 AlarmManager?)

好的,这是我正在使用的代码:

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 0);
calendar.add(Calendar.MINUTE, 0);
calendar.add(Calendar.HOUR, 3);

Intent _myIntent = new Intent(MainActivity.this, AlarmReceiver.class);
_myIntent.putExtra("MyMessage","Content of the message");
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 123, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager = (AlarmManager) MainActivity.this.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60*60*24, pendingIntent);

此代码将在我的应用程序每次启动时执行(在 MainActivity 的 onCreate(); 方法内)。

最佳答案

Note: as of API 19, all repeating alarms are inexact. If your application needs precise delivery times then it must use one-time exact alarms, rescheduling each time.

不精确的调度意味着任何两次连续触发警报之间的时间可能会有所不同。我猜这就是你的情况。为了克服确切的时间问题,我认为你应该使用一次性警报。但在这种情况下,你需要将其重新安排到第二天。等等。 从文档setrepeating可以得到非常清晰的理解, setInexactRepeating .

编辑:- 优化 DOZE 模式如果您正在使用 setAndAllowWhileIdle()setExactAndAllowWhileIdle(),那你一定要读This Document上面写着:-

Neither setAndAllowWhileIdle() nor setExactAndAllowWhileIdle() can fire alarms more than once per 9 minutes, per app.

关于android - 每天在特定时间运行代码 - AlarmManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650813/

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