Android 工作室通知

Android studio notifications

我的应用程序中的通知有问题。我想为一天中的不同时间设置多个通知。例如,我们以 8 点、12 点和 23 点为例。但是每天只有23点触发。我的代码有什么问题,即使应用程序被终止,它还能工作吗? 这是在我的 activity

中设置警报的代码
public void myAlarm(int hour, int minute) {

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, 0);


    Intent intent = new Intent(getApplicationContext(), Reminder.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    if (alarmManager != null) {
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
    }
}

这就是我在 onCreate 中写的

        myAlarm(8, 0);
        myAlarm(12, 0);
        myAlarm(23, 0);

这是我的接收器

public class Reminder extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
    Intent in = new Intent(context, MySecoundActivity.class);
    in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "Reminder")
            .setSmallIcon(R.drawable.bell)
            .setContentTitle("Notification!")
            .setContentText("Text of notification")
            .setColor(0xfb3ff)
            .setAutoCancel(true)
            .setContentIntent(pendingIntent)
            .setPriority(NotificationCompat.PRIORITY_HIGH);


    NotificationManagerCompat notificationMngr = NotificationManagerCompat.from(context);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = "Reminder";
        String description = "reminder channel";
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel channel = new NotificationChannel("Reminder", name, importance);
        channel.setDescription(description);
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);

    }
    notificationMngr.notify(200, builder.build());
}

接收者在 android 清单中

<receiver android:name=".Reminder"/>

这是预期的行为,因为在您的代码中,当您设置警报时,您必须为每个 PendingIntent 提供唯一的 requestCode,在您的情况下它保持不变,即 0。因此,当您使用相同的 requestCode 设置另一个警报时,最后一个警报会更新为新时间,而不是创建新警报。所以只有你的最后一个闹钟有效。所以在设置闹钟的时候,在你的 PendingIntent.getBroadcast() 中,而不是 0,你可以使用 Random class 每次生成一个随机数,或者你可以只使用 (int)System.currentTimeMillis()这总是一个不同的数字。