我正在尝试使用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&中获取日期和时间。时间对话框选择器
答案 0 :(得分:1)
我已多次实施AlarmManager,以下技术可以帮助您。
计算您的闹钟时间(以毫秒为单位),例如您希望在10分钟后设置闹钟,然后在当前时间后设置10 * 60 * 1000毫秒。
以当前毫秒为单位添加您计算的时间
实施例
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