Timed Notifications(Android)的一些问题?

时间:2016-07-10 14:16:45

标签: android notifications broadcastreceiver alarm android-alarms

我正试图在上午9点创建一个自动通知。

我创建了以下代码,但我无法获得自动通知。

而且,我确实在Android Manifest文件中添加了所需的权限。

MainActivity.class'onCreate方法中,我调用了该函数: setAlarm();

public void setAlarm() {

  AlarmManager alarmMgr;
  PendingIntent alarmIntent;

  alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
  Intent intent = new Intent(getApplicationContext(), Notifications.class);
  alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 1001, intent, PendingIntent.FLAG_UPDATE_CURRENT);

  Calendar calendar_now = Calendar.getInstance();
  Calendar calendar = Calendar.getInstance();
  calendar.setTimeInMillis(System.currentTimeMillis());
  calendar.set(Calendar.HOUR_OF_DAY, 9);
  calendar.set(Calendar.MINUTE, 30);

  alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 1, alarmIntent);

  if(calendar_now.getTimeInMillis() == calendar.getTimeInMillis()) {
    new Notifications().createNotification(getApplicationContext(), getIntent(), "Stock-Market Alert", "The Market opens shortly.");
  }

}

Notifications.class如下:

public class Notifications extends BroadcastReceiver {

  public void onReceive(Context context, Intent intent) {
    String notificationTitle = "Default Title", notificationMessage = "Default Message";

    createNotification(context, intent, notificationTitle, notificationMessage );
  }

  public void createNotification(Context context, Intent intent, String notificationTitle, String notificationMessage) {

    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 1001, 
               new Intent(context, Repeating_activity.class), PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
          .setSmallIcon(android.R.drawable.arrow_up_float)
          .setContentTitle(notificationTitle)
          .setContentText(notificationMessage)
          .setTicker("Alert Message !")
          .setAutoCancel(true)
          .setSmallIcon(android.R.drawable.stat_sys_warning);

    builder.setContentIntent(pendingIntent);
    builder.setDefaults(NotificationCompat.DEFAULT_VIBRATE);
    builder.setDefaults(NotificationCompat.DEFAULT_SOUND);

    notificationManager.notify(1001, builder.build());
  }
}

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您正在尝试比较毫秒,很少您将匹配相同的毫秒(不要说几乎从不)。另外,添加逻辑以比较Receiver上的时间。请尝试以下代码:

public void onReceive(Context context, Intent intent) {
    Calendar cal = Calendar.getInstance();
    int currentHour = cal.get(Calendar.HOUR);
    int currentMinute = cal.get(Calendar.MINUTE);
    if (currentHour == 9 && currentMinute == 00) {
        String notificationTitle = "Default Title", notificationMessage = "Default Message";
        createNotification(context, intent, notificationTitle, notificationMessage );
    }
}

你的setAlarm()方法可以很简单:

    public void setAlarm(){
         AlarmManager alarmMgr;
         PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(getApplicationContext(), Notifications.class);
        alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 1001, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 1, alarmIntent);

    }