Android 在特定时间获取一次通知

Android 在特定时间获取一次通知,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,在这里,我需要在特定日期收到通知。这就是我到目前为止所做的 这是我的主要活动 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Calendar ca

在这里,我需要在特定日期收到通知。这就是我到目前为止所做的

这是我的主要活动

public class MainActivity extends Activity {
   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Calendar calendar = Calendar.getInstance();     
    calendar.set(Calendar.MONTH, calendar.MAY);
    calendar.set(Calendar.YEAR, 2014);
    calendar.set(Calendar.DAY_OF_MONTH, 4);

    calendar.set(Calendar.HOUR_OF_DAY, 15);
    calendar.set(Calendar.MINUTE, 24);
    calendar.set(Calendar.SECOND, 19);


    Intent intent = new Intent(MainActivity.this, AlarmBroadcastReceiver.class);            
    PendingIntent pintent =
                        PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pintent);
  }
}
这是我的听筒

  public class AlarmBroadcastReceiver extends BroadcastReceiver {


  @Override
  public void onReceive(Context context, Intent intent) {       
     notificationStatus(context);
  }


/**
 * To show notification for the alarm on time that is set as reminder
 * @param context
 */

private void notificationStatus(Context context) {
    final NotificationManager mNotificationManager = (NotificationManager)
            context.getSystemService(Context.NOTIFICATION_SERVICE);

    final int icon = R.drawable.ic_launcher;
    final CharSequence tickerText = context.getString(R.string.event);
    final long when = System.currentTimeMillis();


    final Notification notification = new Notification(
            icon, "Happy Birthday", when);
    final Intent notificationIntent = new Intent(
            context.getApplicationContext(), MainActivity.class);
    final PendingIntent contentIntent = PendingIntent.getActivity(
            context.getApplicationContext(), 0, notificationIntent, 0);

    notification.setLatestEventInfo(context, tickerText,
            "Happy Birthday", contentIntent);
    mNotificationManager.notify(1, notification);
}

}
一切正常。我会在需要的时候收到通知,但每次打开应用程序时也会出现通知。我的代码有什么问题


提前感谢。

这是因为您已将通知生成代码放置在应用程序的onCreate方法中,因此每次打开活动时它都会调用。因此,请为创建通知创建一个方法,并在需要生成通知时调用它。

通知不是在应用程序的onCreate中创建的,甚至不是在活动的onCreate中创建的。如果时间是过去的,则代码应立即显示通知。根据当前时间与硬编码值的比较,您将立即收到通知。