如果将日期添加到日历,则警报管理器无法触发警报

时间:2011-12-20 11:05:29

标签: android alarmmanager

我正在尝试使用AlarmManager在我的应用程序中创建警报。

我可以设置多个警报,但如果将DATE参数添加到日历,则根本不会触发警报。以下是我的代码

        Intent intent = new Intent(this, OneShotAlarm.class);
        /*Pass the task row ID as the Unique ID for Pending Intent*/
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), (int) rowid , intent, PendingIntent.FLAG_ONE_SHOT);

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
        calendar.clear();
        calendar.setTimeInMillis(System.currentTimeMillis());

        calendar.set(Calendar.HOUR_OF_DAY, mHour);
        calendar.set(Calendar.MINUTE, mMinute);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        long timeSet = calendar.getTimeInMillis();
        alarmManager.set(AlarmManager.RTC_WAKEUP, timeSet, pendingIntent);

如果我将日期参数添加到日历

        calendar.add(Calendar.DAY_OF_MONTH, mDay);
        calendar.add(Calendar.MONTH, mMonth);
        calendar.add(Calendar.YEAR, mYear);

不会触发警报。我必须在将来安排一个活动。请提出我遗漏的内容。谢谢你的帮助!!

P.S。我正在从Date&中获取日期和时间。时间对话框选择器

2 个答案:

答案 0 :(得分:1)

我已多次实施AlarmManager,以下技术可以帮助您。

  1. 计算您的闹钟时间(以毫秒为单位),例如您希望在10分钟后设置闹钟,然后在当前时间后设置10 * 60 * 1000毫秒。

  2. 以当前毫秒为单位添加您计算的时间

  3. 实施例

    long currentTime = System.currentTimeMillis();
    long fireTime = 10 * 60 * 1000;    
    Intent ucintent = new Intent(getApplicationContext(),TimeAlarmReceiver.class);
    ucintent.putExtra("isAlarm", true);
    
    PendingIntent mTimeSlot = PendingIntent.getBroadcast(getApplicationContext(), (int)fireTime , ucintent, PendingIntent.FLAG_ONE_SHOT);
    alarmManager.set(AlarmManager.RTC_WAKEUP,currentTime+ fireTime, mTimeSlot);
    

    上面的例子很完美。

    谢谢,

答案 1 :(得分:0)

Ketan的回答很好但是有错误。

'nn-nnnnnnn'

然而,你并不想要" fireTime"在PendingIntent中。你应该有一个请求代码。这是您创建的代码,用于标识待处理的意图。它适用于Ketan的情况,因为他总是使用同一时间。但如果你改变时间,最终会有两种不同的意图。

请参阅https://developer.android.com/reference/android/app/PendingIntent.html