0

Calendar calendars = Calendar.getInstance();
                        calendars.setTimeInMillis(System.currentTimeMillis());
                        calendars.set(Calendar.HOUR_OF_DAY, hour);
                        calendars.set(Calendar.MINUTE, min);
                        calendars.set(Calendar.SECOND, 0);
                        calendars.set(Calendar.MILLISECOND, 0);
                        calendars.set(Calendar.AM_PM, timezone);
                        
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), currentTime, intent, PendingIntent.FLAG_UPDATE_CURRENT);


if (Build.VERSION.SDK_INT < 23) {
                        if (Build.VERSION.SDK_INT >= 19) {
                            alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendars.getTimeInMillis(), pendingIntent);
                        } else {
                            alarmManager.set(AlarmManager.RTC_WAKEUP, calendars.getTimeInMillis(), pendingIntent);
                        }
                    } else {
                        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendars.getTimeInMillis(), pendingIntent);
                    }

在我的应用程序中,如果我在一小时内设置警报,那么它工作正常,但长时间无法正常工作。

我对我们面临的警报问题进行了很多搜索,发现在最新的 android 更新中,如果其他任务需要内存或处于低电池状态或无缘无故,android 操作系统正在杀死广播接收器。

在某些情况下,如果手机处于空闲/打瞌睡模式,那么警报也不起作用。

您可以查看以下链接。

1) https://www.fusonic.net/en/blog/why-my-broadcastreceiver-does-not-get-call/

2) sendWakefulWork 并不总是使用 cwac-wakeful-1.1.0 调用

3)几个小时过去后,Android 中的警报停止

4) https://stackoverflow.com/a/42468819

我发现如果你从后台杀死应用程序,那么所有警报接收器都会被清除。为此,您必须为您的应用设置启用自动启动。

但是我们不能以编程方式设置它,因为所有移动品牌都有不同的方法来设置它。

一个。VIVO 手机 - 设置 - 更多设置 - 应用程序 - 自动启动 - 为您的应用启用自动启动。

湾。Redmi 手机 - 安全应用 > 权限 > 自动启动 - 为您的应用启用自动启动。

在代码中,我制作了后台服务,它将在后台运行并在每个预定义的时间间隔重置警报。

这样做之后,早上的闹钟仍然无法在某些设备上运行,例如 Redmi note 4、samsung s3

在其他设备中,交替发出警报。示例-如果我在上午 7 点、8 点、9 点设置 3 个闹钟。只有 2-3 个在工作。

Android OS 是否也在扼杀 BG 服务?请帮忙。

4

0 回答 0