BootCompletedReceiver在启动时运行后台服务,因此生日期间的通知在运行时期间位于通知栏中。当我从通知栏中删除通知时,我希望在那之后15分钟看到它,但我没有,它随机出现。
我的代码出了什么问题?
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, BirthdayNotifyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
context.startService(serviceIntent);
setAlarm(context, pendingIntent);
}
private void setAlarm(Context context, PendingIntent pendingIntent) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), 1000 * 60 * 2, pendingIntent);
}
public class BirthdayNotifyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
createNotifications();
return super.onStartCommand(intent, flags, startId);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void createNotifications() {
// Fetching contacts from the Contacts application
ArrayList<MyContact> contactsList = BirthdayDataFactory.getContacts(this);
// Going trough the contacts list and creating notifications for each contact that has birthday
for (int i = 0; i<contactsList.size(); i++) {
if(contactsList.get(i).hasBirthday()) {
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
// Creating a notification builder
NotificationCompat.Builder builder =
(NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("Birthday Notifier")
.setContentText(contactsList.get(i).getName() + " has a Birthday today!")
.setContentIntent(pendingIntent);
// Creating a notification manager
NotificationManagerCompat manager = NotificationManagerCompat.from(this);
manager.notify(i, builder.build());
}
}
}
}
答案 0 :(得分:0)
“当我从通知栏中删除通知时,我希望看到 在那之后15分钟“
如果您想要这样做,则不需要服务或重复警报。
你应该做的是在你的NotificationBuilder上使用.setDeleteIntent(Intent intent),传入一个意图,设置一个警报,在15分钟内再次运行通知代码,看起来像这样,而不是你当前的有setAlarm():
alarmManager.set(AlarmManager.ELAPSED_REALTIME, 1000*60*15, pendingIntent);
您目前在代码中执行的操作如下:
<强> context.startService(serviceIntent);
强>
立即启动服务,显示通知
<强> setAlarm(context, pendingIntent);
强>
设置一个警报,显示通知,立即触发,此后每2分钟触发一次
我建议您阅读更多关于您正在使用的每个方法/类的内容。
答案 1 :(得分:0)
您可以使用alarmManager.INTERVAL_FIFTEEN_MINUTES
代替1000 * 60 * 2