在 Android API 26 后发送本地通知
Send Local Notifications in Android API 26
我想在我的 Android 应用程序中安排简单的本地通知。
这在我定位 API 24 时工作正常,但由于我必须移动到最后一个 API 才能更新我的应用程序,因此我必须更改一些内容在我的代码中。
目前,我使用WakefulBroadcastReceiver
和简单的Service
发送通知。
每次我想发送通知时,我都会向我的 WakefulBroadcastReceiver
发送一个包含所有信息的 Intent
,然后在 onReceive
方法中我创建一个服务并调用 startWakefulService(context, service);
.
WakefulBroadcastReceiver
确保进程不会被终止,并且服务在触发通知之前在后台执行繁重的工作。
但现在有了最新 Android 版本的新 后台限制 ,我无法在我的应用程序处于后台时简单地启动服务,因此每次尝试发送通知使我的应用程序崩溃:java.lang.IllegalStateException:不允许启动服务:应用程序在后台。
我还注意到 WakefulBroadcastReceiver
现在已弃用。
设置闹钟时:
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);
收到报警时:(在NotifBroadcastReceiver中class)
// onReceive method
startWakefulService(context, service);
// the service then does the heavy job and fires the notification...
我的问题:
- 如何使用简单的
BroadcastReceiver
(而不是 WakefulBroadcastReceiver
)通过确保 CPU 在整个过程中保持清醒来发送通知?
- 如何更改我的代码来完成后台服务现在执行的繁重工作?
我读过 JobScheduler
,但它似乎不能用在这种情况下,因为 它不能保证我会 运行时间.
通知是我的应用程序中非常重要的一部分,所以如果它们不再被触发,应用程序实际上就没用了...
我最终使用了 IntentJobService
,因为它与 Pre-O 的 Service
相同,Jobs
用于 Android O。
我想在我的 Android 应用程序中安排简单的本地通知。
这在我定位 API 24 时工作正常,但由于我必须移动到最后一个 API 才能更新我的应用程序,因此我必须更改一些内容在我的代码中。
目前,我使用WakefulBroadcastReceiver
和简单的Service
发送通知。
每次我想发送通知时,我都会向我的 WakefulBroadcastReceiver
发送一个包含所有信息的 Intent
,然后在 onReceive
方法中我创建一个服务并调用 startWakefulService(context, service);
.
WakefulBroadcastReceiver
确保进程不会被终止,并且服务在触发通知之前在后台执行繁重的工作。
但现在有了最新 Android 版本的新 后台限制 ,我无法在我的应用程序处于后台时简单地启动服务,因此每次尝试发送通知使我的应用程序崩溃:java.lang.IllegalStateException:不允许启动服务:应用程序在后台。
我还注意到 WakefulBroadcastReceiver
现在已弃用。
设置闹钟时:
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);
收到报警时:(在NotifBroadcastReceiver中class)
// onReceive method
startWakefulService(context, service);
// the service then does the heavy job and fires the notification...
我的问题:
- 如何使用简单的
BroadcastReceiver
(而不是WakefulBroadcastReceiver
)通过确保 CPU 在整个过程中保持清醒来发送通知? - 如何更改我的代码来完成后台服务现在执行的繁重工作?
我读过 JobScheduler
,但它似乎不能用在这种情况下,因为 它不能保证我会 运行时间.
通知是我的应用程序中非常重要的一部分,所以如果它们不再被触发,应用程序实际上就没用了...
我最终使用了 IntentJobService
,因为它与 Pre-O 的 Service
相同,Jobs
用于 Android O。