1

我搜索了很多,但找不到任何明确的内容。每个解决方案似乎都过时了。在我的应用程序中,我需要这个简单的任务:用户可以启用每日提醒并在时间选择器中选择一个时间。每天在选定的时间,用户应该会收到一个简单的通知。我只需要读取本地数据库(Room、SQLite)然后显示通知。我正在使用 AlarmManager,因为用户应该在他选择的确切时间收到通知。当应用程序打开或最小化时,一切正常。当我在最近使用的应用程序中关闭应用程序(向上滑动)时,我没有收到通知。

我有一个用这个调用创建警报的类:

alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,                 
 calendar.getTimeInMillis(), pendingIntent);

pendingIntent 打开一个 NotificationReceiver 扩展 BroadcastReceiver 类。在 onReceive 方法中,我读取了数据库并显示了通知。我还尝试在 onReceive 方法(IntentService 或 Service)中启动服务,但它们的工作方式与使用广播接收器完全一样。

我将接收器放在 AndroidManifest 中。一切正常,除非我关闭应用程序或重新启动系统(我在清单中注册了 BOOT_COMPLETED 并且我有另一个广播接收器再次配置警报。如果我打开应用程序并在通知时间之前保持打开状态,那么我会收到它。但如果应用程序仍然关闭,我不会收到它。所以我认为 BOOT_COMPLETED 工作正常)。其他解决方案似乎不起作用。我该怎么做才能让它在 Android 11(Pixel 3 设备)上运行?

我需要的一个例子是 Google Keep 应用程序,但我的应用程序更简单。我没有看到任何通知点表明 Google Keep 正在后台运行。尽管如此,我还是按时收到了提醒。Google Keep 的工作原理是什么?这是一项始终运行的服务(并耗尽电池)?它使用AlarmManager 和BroadcastReceiver?工作经理?即使关闭应用程序或重新启动手机,我总是会收到通知。如何在我的应用程序上实现它?

4

0 回答 0