如何在特定日期和特定时间设置通知?
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 。
我想做一个通知,在特定的时间出现在特定的日期,正如我在标题中写的那样。 现在我的警报在按下按钮后 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