警报管理器每15分钟启动一次通知

时间:2015-11-26 01:07:35

标签: android service notifications alarmmanager

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());
        }
    }
}

}

2 个答案:

答案 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

相关问题