【问题标题】:Pushing more than one notification at specific time (AlarmManager, NotificationManager) - Android在特定时间推送多个通知(AlarmManager,NotificationManager) - Android
【发布时间】:2017-07-01 18:57:28
【问题描述】:

我正在尝试制作将在特定时间推送一次的离线推送通知。 这是我的日历和 AlarmManager 设置:

Intent intent = new Intent(getApplicationContext(), Notification_receiver.class);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(), 102, intent, PendingIntent.FLAG_UPDATE_CURRENT);


    Calendar push1 = Calendar.getInstance();
    Calendar push2 = Calendar.getInstance();

    push1.set(2017, Calendar.JULY, 1);
    push1.set(Calendar.HOUR_OF_DAY, 20);
    push1.set(Calendar.MINUTE, 22);
    push1.set(Calendar.SECOND, 30);

    push2.set(2017, Calendar.JULY, 1);
    push2.set(Calendar.HOUR_OF_DAY, 20);
    push2.set(Calendar.MINUTE, 28);
    push2.set(Calendar.SECOND, 30);


    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, push1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent1);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, push2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent2);

还有我的通知类:

public class Notification_receiver extends BroadcastReceiver{


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

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

    Intent repeating_intent = new Intent(context, RepeatingActivity.class);
    repeating_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent1 = PendingIntent.getActivity(context, 101, repeating_intent, PendingIntent.FLAG_UPDATE_CURRENT);
    PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 102, repeating_intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder1 = new NotificationCompat.Builder(context).setContentIntent(pendingIntent1)
            .setSmallIcon(R.drawable.onusicijadi_icon)
            .setContentTitle("FIRST")
            .setContentText("FIRST NOTIFICATION")
            .setDefaults(Notification.DEFAULT_ALL)
            .setAutoCancel(true);

    notificationManager.notify(103, builder1.build());

    NotificationCompat.Builder builder2 = new NotificationCompat.Builder(context).setContentIntent(pendingIntent2)
            .setSmallIcon(R.drawable.onusicijadi_icon)
            .setContentTitle("SECOND")
            .setContentText("SECOND NOTIFICATION")
            .setDefaults(Notification.DEFAULT_ALL)
            .setAutoCancel(true);

    notificationManager.notify(104, builder2.build());

}}

RepeatingActivity.class 只是:

public class RepeatingActivity extends AppCompatActivity{


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

     setContentView(R.layout.activity_program);

}

这段代码在 20:22 和 20:28 发送两个通知,显然我希望它分开。例如,一个通知在 20:22 开始,另一个通知在 20:28 开始。 在为期 3 天的节日期间,我需要为每个活动发送大约 30 条通知。

【问题讨论】:

    标签: java android notifications


    【解决方案1】:

    你用的是哪个api?

    注意:从 API 19 开始,所有重复警报都是不准确的。如果你的 应用程序需要精确的交付时间,那么它必须使用一次性 准确的警报,每次重新安排如上所述。遗产 targetSdkVersion 早于 API 19 的应用程序将 继续有他们所有的警报,包括重复警报, 被视为精确。

    您可以在AlarmManager docs 上找到更多信息,如果您仍然使用AlarmManager,解决方案将是setExactsetExactAndAllowWhileIdle

    使用时要小心,如果您在短时间内收到多个通知,则可以考虑使用服务。

    【讨论】:

    • 当我使用setExact 时,它的作用相同,两个通知同时到达,稍后,它们都再次到达。我想知道如何一次发送第一个,然后再发送第二个?为什么两个实例(push1 和 push2)都在只有 push1 应该到达的时候到达?
    • @OgiScekic 甚至 setExact 也有问题,因为它在空闲时不会运行。让它真正匹配您指定的时间需要setExactAndAllowWhileIdle,但这是 API 23 及更高版本。在这种情况下,您可以考虑通过 JobScheduler 或其他可以在一段时间内保持活动状态的方法启动的服务,以便它可以在准确的时间发出通知。
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多