Android Alarm接收器从未触发过

时间:2013-04-20 13:04:28

标签: java android date alarmmanager android-alarms

我正在尝试根据用户定义的值创建通知,但我的闹钟无效;它永远不会被触发。

片段代码:

// 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);

}
};

1 个答案:

答案 0 :(得分:0)

仅使用thatDateset的时间是实时,而不是延迟。

 AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
 am.set(AlarmManager.RTC_WAKEUP, thatDate.getTimeInMillis(), sender);