如何在特定日期和特定时间设置通知?

How can I set a notification on a specific day and specific time?

我想做一个通知,在特定的时间出现在特定的日期,正如我在标题中写的那样。 现在我的警报在按下按钮后 10 秒内出现。如果我需要设置一个特定的日期,我是否也需要这样做?我需要将日期转换为毫秒并提供此参数? 这是我的代码:

package com.example.timeman;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
public class ReminderBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "notify")
            .setSmallIcon(R.drawable.ic_baseline_close_24)
            .setContentTitle("Salamabuliy")
            .setContentText("TextNotif")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            ;
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

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

}

和 OnClick 方法:

public void onClick(View view) {
            Intent intent = new Intent(getActivity(), ReminderBroadcast.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);

            AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);

            long timeAtButtonClick = System.currentTimeMillis();

            long tenSecondsInMillis = 1000*10;

            alarmManager.set(AlarmManager.RTC, timeAtButtonClick + tenSecondsInMillis, pendingIntent);
            //displayNotification();
            OpenThis(view);
        }

一个选项是找到从现在到您希望它出现的日期之间的持续时间(以毫秒为单位)。例如;

LocalDateTime now = LocalDateTime.now();

LocalDateTime end = now.plusSeconds(10); // end date can be specific, this is an example

Duration difference = Duration.between(now, end);

long differenceMillis = difference.toMillis();

使用Instant#toEpochMilli() and Instant#plusSeconds如下图:

import java.time.Instant;

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant now = Instant.now();
        System.out.println(now.toEpochMilli());

        // After 10 seconds
        Instant after10SecFromNow = now.plusSeconds(10);
        long millisAfter10Sec = after10SecFromNow.toEpochMilli();
        System.out.println(millisAfter10Sec);

        // alarmManager.set(AlarmManager.RTC, millisAfter10Sec, pendingIntent);
    }
}

输出:

1597837345043
1597837355043

详细了解 java.time*the modern Date-Time API, from Trail: Date Time


* 无论出于何种原因,如果您必须坚持Java 6 或Java 7,您可以使用ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and