我正在尝试根据用户定义的值创建通知,但我的闹钟无效;它永远不会被触发。
片段代码:
// Set reminder
// From java.util.Calendar;
Calendar timeNow = Calendar.getInstance();
timeNow.setTimeInMillis(System.currentTimeMillis());
Calendar thatDate = Calendar.getInstance();
thatDate.setTimeInMillis(System.currentTimeMillis());
// add date and time to calender object
//** Im trying to set the alarm for the 20th of April, 2013 at 14:03**
thatDate.add(Calendar.MINUTE, 3 - timeNow.get(Calendar.MINUTE));
thatDate.add(Calendar.MONTH, 3 - timeNow.get(Calendar.MONTH)); //Its April, so I did 3 not 4
thatDate.add(Calendar.DAY_OF_MONTH,
20 - timeNow.get(Calendar.DAY_OF_MONTH));
thatDate.add(Calendar.HOUR, 14 - timeNow.get(Calendar.HOUR));
thatDate.add(Calendar.YEAR, 2013 - timeNow.get(Calendar.HOUR));
Intent alarmintent = new Intent(getActivity(),
AlarmReceiver.class);
alarmintent.putExtra("title", titleEt.getText().toString());
alarmintent.putExtra("note", desc.getText().toString());
PendingIntent sender = PendingIntent
.getBroadcast(getActivity(), ALARM_ID, alarmintent,
PendingIntent.FLAG_UPDATE_CURRENT
| Intent.FILL_IN_DATA);
/*
* VERY IMPORTANT TO SET FLAG_UPDATE_CURRENT... This will send
* the correct extra's informations to the AlarmReceiver class
*/
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getActivity()
.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, thatDate.getTimeInMillis() - timeNow.getTimeInMillis(), sender);
我的报警器代码:
public class AlarmReceiver extends BroadcastReceiver {
private static int NOTIFICATION_ID = 1;
@Override
public void onReceive(Context context, Intent intent) {
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationManager manger = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(
R.drawable.ic_stat_reminder, "Todo Reminder",
System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(context,
NOTIFICATION_ID, new Intent(context, AlarmReceiver.class), 0);
Bundle extras = intent.getExtras();
String title = extras.getString("title");
// Get the title and description of our Notification
/*
* Notification noti = new Notification.InboxStyle( new
* Notification.Builder() .setContentTitle("5 New mails from " +
* sender.toString()) .setContentText(subject)
* .setSmallIcon(R.drawable.new_mail) .setLargeIcon(aBitmap))
* .addLine(str1) .addLine(str2) .setContentTitle("")
* .setSummaryText("+3 more") .build();
*/
String note = extras.getString("note");
notification.setLatestEventInfo(context, note, title, contentIntent);
notification.flags = Notification.FLAG_INSISTENT;
notification.defaults |= Notification.PRIORITY_MAX;
// Set the default sound for our notification
// notification
manger.notify(NOTIFICATION_ID++, notification);
}
};
答案 0 :(得分:0)
仅使用thatDate
。 set
的时间是实时,而不是延迟。
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, thatDate.getTimeInMillis(), sender);