重启Phone后设置告警

时间:2014-10-18 13:44:49

标签: android broadcastreceiver alarmmanager notificationmanager android-reboot

我有一个小问题。我使用AlarmManager在特定时间设置通知。我设置通知的时间存储在SQLLite数据库中。除了我重启手机的那一刻,它们都很完美。 alarmManager当然会失去重复。

我想问一下这种情况下最好的解决办法是什么?我在MainActivity中设置了alarmManager,并在BroadcastReceiver中设置了我的通知,如下面的代码所示:

以下是我从MainActivity中调用它的方法:

        Intent intent = new Intent(context, MyReceiver.class);
        intent.putExtra(EXTRA_TITLE, title);
        intent.putExtra(EXTRA_COUNT, count);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, count, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), WEEK_LENGTH_MS, pendingIntent);

这是广播接收方的onReceive方法

  public void onReceive(Context context, Intent intent)
    {
        nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        CharSequence from = context.getString(R.string.app_name);
        CharSequence message = intent.getStringExtra(DayActivity.EXTRA_TITLE);
        Intent intentNotification = new Intent(context,DayActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context, intent.getIntExtra(DayActivity.EXTRA_COUNT,0), intentNotification, 0);
        Notification notif = new Notification(R.drawable.notification_logo,context.getString(R.string.app_name), System.currentTimeMillis());
        notif.setLatestEventInfo(context, from, message, contentIntent);
        notif.defaults |= Notification.DEFAULT_LIGHTS;
        notif.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
        nm.notify(intent.getIntExtra(DayActivity.EXTRA_COUNT,0), notif);

    }

我正在为BOOT_COMPLETED事件声明BroadcastReceiver,但它在我启动手机时始终只调用空通知,而且永远不会更多。

1 个答案:

答案 0 :(得分:1)

  

我想问一下这种情况下最好的解决办法是什么?

注册BOOT_COMPLETED BroadcastReceiver以致电setRepeating()上的AlarmManager以重新制定您的日程安排。

  

我正在为BOOT_COMPLETED事件声明BroadcastReceiver,但它在我启动手机时始终只调用空通知,而且永远不会更多。

BOOT_COMPLETED BroadcastReceiver的目标应该是重新安排闹钟。您可能希望考虑使用单独的BroadcastReceiver而不是您用于警报事件本身的那个。{/ p>