【问题标题】:Don't show notification when the application starts应用程序启动时不显示通知
【发布时间】:2023-04-08 00:26:01
【问题描述】:

如果有任何事件发生,我有一个应用程序使用 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);
            }
        }
} 

【问题讨论】:

    标签: java android notifications alarmmanager


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 好的,山姆,我按照你的建议做了。取消 onResume() 上的警报并在 onPause() 上重新创建它们。我面临的问题是,由于通知是在 onCreate() 上实例化的,它首先运行通知,然后可能会取消 onResume() 上的警报,这违背了目的。我不知道还能怎么做?
    • 您应该只在 onPause() 中创建警报,而不是 onCreate()。正如你所说,在 onCreate() 中启动通知只是为了在 onResume() 中取消它们是没有目的的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多