我不敢相信自己在问这个问题,但是我想在我的Android应用中安排通知的时间(是否重复)。
在Android培训文章之后,我设法使用WakefulBroadcastReceiver
和Service
轻松地做到了这一点。但是现在,由于我必须将最新的Android API定位为将来的更新,因此我必须对代码进行一些更改。
我认为WakefulBroadcastReceiver
已被弃用,因此我使用的是简单的BroadcastReceiver
。
当前实施
每当我要安排警报时,都会向Intent
发送BroadcastReceiver
并使用onReceive
方法,而不是以前对startWakefulService(context, service);
的调用,我做了context.startService(service);
。但是由于后台限制,当我的应用程序在后台运行时,我无法启动服务...
我有一个错误: java.lang.IllegalStateException:不允许启动服务:应用程序在后台
如何有效地更改代码以解决此问题?我调用的服务是将通知发送给用户的服务。
代码
设置闹钟
Intent broadcastIntent = new Intent(context, AlarmReceiver.class);
// put the extras for the notification details
// ...
alarmIntent = PendingIntent.getBroadcast(context, idNotif, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
millis, interval, alarmIntent);
Intent
类收到了AlarmReceiver
// onReceive method
context.startService(service); // The ERROR is raised here when my app is in bg
编辑
我不能使用JobScheduler
,因为它不能保证我会及时发送通知。
我也无法启动前台服务来发送通知。
答案 0 :(得分:0)
我找到了一篇有用的文章,您可以通过访问此website
了解更多信息为了简化:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
notificationIntent.addCategory("android.intent.category.DEFAULT");
PendingIntent broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), broadcast);
}
以上代码将在30秒后安排警报,并将广播notificationIntent
。