Android:在特定日期安排通知消息

时间:2016-10-10 13:30:12

标签: java android notifications alarm schedule

我正在为Android应用创建一个功能,我每个月25日都会收到通知,表明我必须完成某项任务。

我已经能够使用以下代码显示通知:

public class NotificationPublisher extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    long[] pattern = {0, 300, 0};
    PendingIntent pi = PendingIntent.getActivity(context, 01234, intent, 0);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.small_logo_ico)
            .setContentTitle(context.getResources().getString(R.string.notification_title))
            .setContentText(context.getResources().getString(R.string.notification_content))
            .setVibrate(pattern)
            .setAutoCancel(true);

    mBuilder.setContentIntent(pi);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(01234, mBuilder.build());
}

}

现在这个系统只有在我的应用程序打开时才有效,并且在应用程序关闭时不允许我显示它。我四处寻找并来到这里: Android notification at specific date 在尝试了这个(计划部分)后,我注意到当我关闭应用程序时它不起作用,因为我收到关于取消注册接收器的错误,执行此操作(取消注册)导致接收器被取消,并且通知不能被展示。

用于日程安排的代码:

NotificationPublisher receiver = new NotificationPublisher();
    this.receiver = receiver;
    IntentFilter filter = new IntentFilter("ALARM_ACTION");
    registerReceiver(receiver, filter);

    Intent intent = new Intent("ALARM_ACTION");
    intent.putExtra("param", "My scheduled action");
    PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0);
    // I choose 15s after the launch of my application
    alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+15000, operation) ;

我有什么遗漏,或者我是否使用错误的方法在某个特定日期安排通知? (当前通知设置为将来安排15秒,这仅用于测试,我已准备好在某个日期显示此功能)

1 个答案:

答案 0 :(得分:0)

这用于在月中通知。也许你可以从下面的代码中获得。

private string GetCodePart()
{
  string str = "Shouldly uses your source code to generate its great error messages, build your test project with full debug information to get better error messages\nThe provided expression";
  if (this._determinedOriginatingFrame)
  {
    string codeLines = string.Join("\n", ((IEnumerable<string>) File.ReadAllLines(this.FileName)).Skip<string>(this.LineNumber).ToArray<string>());
    int indexOfMethod = codeLines.IndexOf(this._shouldMethod);
    if (indexOfMethod > 0)
      str = codeLines.Substring(0, indexOfMethod - 1).Trim();
    str = !str.EndsWith("Should") ? str.RemoveVariableAssignment().RemoveBlock() : this.GetCodePartFromParameter(indexOfMethod, codeLines, str);
  }
  return str;
}