0

如果有任何事件发生,我有一个使用 AlarmManager 来安排通知的应用程序。这很好用。

问题是每次用户实例化应用程序时,如果是事件日,它会显示状态栏通知。我只想在应用程序不活动(即关闭)时显示状态栏通知。

@Override
public void onCreate(Bundle savedInstanceState)
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_calendar_view);

        if (notification_value == true) {
            int dayOfEvent = day;
            if (notification_day == 1) {
                dayOfEvent = day + 1;

            }
            if(isHoliday(dayOfEvent, month, year))
            {
                String mn = monthName[month-1];
                String date_string = setParameter(year, mn, dayOfEvent);
                startAlarm(year, (month-1), day, hour, mins, date_string);
            }
        }
} 
4

1 回答 1

0

要防止 AlarmManager 在您的应用程序运行时创建通知,只需在 onResume() 中使用AlarmManager.cancel(PendingIntent intent)并在 onPause() 中重新创建警报。

来自 AlarmManager.cancel() 的 Android 文档:

删除任何具有匹配 Intent 的警报。任何类型的任何警报,其 Intent 与此匹配(由 filterEquals(Intent) 定义)都将被取消。

这表明您不必保留对旧警报的引用,任何具有匹配 Intent 的警报都将被取消。

最后,我不建议将代码移动到 onCreate() 和 onDestory,因为用户可以暂停应用程序(例如使用 Home 按钮),然后再被操作系统杀死。在这种情况下,永远不会调用 onDestroy() 方法。如果在应用程序处于后台时出现通知是不可接受的,请阅读有关如何跟踪应用程序实际被终止时间的详细答案:检查 Android 应用程序是否在后台运行

于 2012-08-13T04:40:17.187 回答