防止android日常警报在警报设置期间运行意图

时间:2012-03-11 21:31:24

标签: java android

我按照this thread中的说明创建了每日闹钟,每天12:30启动一项服务,显示通知。我遇到的问题是,每次应用启动时,设置闹钟也会触发服务(=>和通知)。

由于我认为警报只会在指定的时间(12:30)运行,所以在应用启动时我没有问题设置。

我意识到每次启动应用程序时从头开始设置警报都有点无效,因为它只需要设置一次(我也设置在设备启动时),但这似乎是最简单的方法。 / p>

那么解决这个问题的最佳方法是什么?有没有办法在设置?

时设置指定时间的警报而不运行意图

如果您感兴趣,可以使用以下代码(每次启动应用程序时都会调用此函数):

public static void setAlarm(Context context)
{
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.setAction("com.Rani.app.SET_NOTIFICATION_ALARM");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    Calendar dailyCheckTime = Calendar.getInstance();
    dailyCheckTime.setTimeZone(TimeZone.getTimeZone("GMT"));
    dailyCheckTime.set(Calendar.HOUR_OF_DAY, 12);
    dailyCheckTime.set(Calendar.MINUTE, 30);
    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarm.cancel(pendingIntent);
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, dailyCheckTime.getTimeInMillis(), 
            AlarmManager.INTERVAL_DAY, pendingIntent);
}

提前感谢。

1 个答案:

答案 0 :(得分:0)

在尝试了几件事之后,我使用this thread中的信息来检查警报是否已经存在,并且仅在没有警报时才设置一个。

代码:

public static void setAlarm(Context context)
{
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.setAction("com.Rani.app.SET_NOTIFICATION_ALARM");

    boolean alarmUp = (PendingIntent.getBroadcast(context,
            0, intent, PendingIntent.FLAG_NO_CREATE) != null);

    // check if an alarm already exists
    if (alarmUp == false)
    {
        // set an alarm in case there isnt one already set
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        Calendar dailyCheckTime = Calendar.getInstance();
        dailyCheckTime.set(Calendar.HOUR_OF_DAY, 12);
        dailyCheckTime.set(Calendar.MINUTE, 30);
        if (dailyCheckTime.getTimeInMillis() < Calendar.getInstance()
                .getTimeInMillis()) {
            dailyCheckTime.set(Calendar.DATE,
                    dailyCheckTime.get(Calendar.DATE) + 1);
        }

        AlarmManager alarm = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pendingIntent);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP,
                dailyCheckTime.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, pendingIntent);
    }
}