在Android API 26中发送本地通知

时间:2018-11-15 11:59:33

标签: android notifications background-process scheduler android-8.0-oreo

我想在我的Android应用中安排简单的本地通知。

当我定位到API 24时,这很好用,但是由于我必须移至最后一个API才能更新我的应用程序,因此我必须更改代码中的某些内容。

当前,我使用WakefulBroadcastReceiver和简单的Service发送通知。

每次我要发送通知时,我都会将Intent和所有信息发送到WakefulBroadcastReceiver,并在onReceive方法中创建服务并调用{{1 }}。

startWakefulService(context, service);确保在触发通知之前不会终止进程,并且服务在后台执行繁重的工作。

但是现在有了最后一个Android版本的新后台限制,我无法在我的应用程序在后台运行时简单地启动服务,因此每次发送通知的尝试都会使我的应用程序崩溃: java.lang.IllegalStateException:不允许启动服务:应用程序在后台。 我还注意到WakefulBroadcastReceiver现在已过时。

设置闹钟时:

WakefulBroadcastReceiver

收到警报时:(在NotifBroadcastReceiver类中)

Intent broadcastIntent = new Intent(context, NotifBroadcastReceiver.class);
// ...
alarmIntent = PendingIntent.getBroadcast(context, idNotification, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
    millis, interval, alarmIntent);

我的问题:

  1. 如何通过确保CPU保持唤醒整个过程的方式,使用简单的// onReceive method startWakefulService(context, service); // the service then does the heavy job and fires the notification... (而不是BroadcastReceiver)发送通知?
  2. 如何更改代码以完成后台服务现在要做的繁重工作?

我已经读过WakefulBroadcastReceiver,但似乎无法在这种情况下使用它,因为无法保证它会在准确的时间运行。 >

通知是我应用程序中非常重要的一部分,因此,如果不再触发通知,则该应用程序实际上是无用的...

1 个答案:

答案 0 :(得分:0)

我最终使用IntentJobService,因为它与Pre-O的Service相同,而对于Android O则使用了Jobs