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

huangapple go评论180阅读模式
英文:

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

问题

我想在特定日期的特定时间显示通知,就像我在标题中写的那样。
现在,我的提醒在按下按钮后的10秒内出现。如果我需要设置特定日期,我需要这样做吗?我需要将日期转换为毫秒,并提供这个参数吗?
以下是我的代码:

  1. package com.example.timeman;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import androidx.core.app.NotificationCompat;
  6. import androidx.core.app.NotificationManagerCompat;
  7. public class ReminderBroadcast extends BroadcastReceiver {
  8. @Override
  9. public void onReceive(Context context, Intent intent) {
  10. NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "notify")
  11. .setSmallIcon(R.drawable.ic_baseline_close_24)
  12. .setContentTitle("Salamabuliy")
  13. .setContentText("TextNotif")
  14. .setPriority(NotificationCompat.PRIORITY_DEFAULT);
  15. NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
  16. notificationManager.notify(200, builder.build());
  17. }
  18. }

还有点击方法:

  1. public void onClick(View view) {
  2. Intent intent = new Intent(getActivity(), ReminderBroadcast.class);
  3. PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
  4. AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
  5. long timeAtButtonClick = System.currentTimeMillis();
  6. long tenSecondsInMillis = 1000 * 10;
  7. alarmManager.set(AlarmManager.RTC, timeAtButtonClick + tenSecondsInMillis, pendingIntent);
  8. //displayNotification();
  9. OpenThis(view);
  10. }
英文:

I want to make a notification to appear on a specific date at a specific time, as I wrote in the title.
Now my alerts come in 10 seconds after pressing the button. If I need to set a specific date, do I need to do that as well? I need convert the date into milliseconds and give this parameter?
Here's my code:

  1. package com.example.timeman;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import androidx.core.app.NotificationCompat;
  6. import androidx.core.app.NotificationManagerCompat;
  7. public class ReminderBroadcast extends BroadcastReceiver {
  8. @Override
  9. public void onReceive(Context context, Intent intent) {
  10. NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "notify")
  11. .setSmallIcon(R.drawable.ic_baseline_close_24)
  12. .setContentTitle("Salamabuliy")
  13. .setContentText("TextNotif")
  14. .setPriority(NotificationCompat.PRIORITY_DEFAULT)
  15. ;
  16. NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
  17. notificationManager.notify(200, builder.build());
  18. }

}

And OnClick Method:

  1. public void onClick(View view) {
  2. Intent intent = new Intent(getActivity(), ReminderBroadcast.class);
  3. PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
  4. AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
  5. long timeAtButtonClick = System.currentTimeMillis();
  6. long tenSecondsInMillis = 1000*10;
  7. alarmManager.set(AlarmManager.RTC, timeAtButtonClick + tenSecondsInMillis, pendingIntent);
  8. //displayNotification();
  9. OpenThis(view);
  10. }

答案1

得分: 4

一个选择是找到从现在到您希望其显示的日期之间的毫秒持续时间。例如;

  1. LocalDateTime now = LocalDateTime.now();
  2. LocalDateTime end = now.plusSeconds(10); // 结束日期可以是具体的,这只是一个示例
  3. Duration difference = Duration.between(now, end);
  4. long differenceMillis = difference.toMillis();
英文:

One option would be to find the duration in millis between now and the date you want it to appear on. For example;

  1. LocalDateTime now = LocalDateTime.now();
  2. LocalDateTime end = now.plusSeconds(10); // end date can be specific, this is an example
  3. Duration difference = Duration.between(now, end);
  4. long differenceMillis = difference.toMillis();

答案2

得分: 0

使用 Instant#toEpochMilli()Instant#plusSeconds,如下所示:

  1. import java.time.Instant;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Instant now = Instant.now();
  5. System.out.println(now.toEpochMilli());
  6. // After 10 seconds
  7. Instant after10SecFromNow = now.plusSeconds(10);
  8. long millisAfter10Sec = after10SecFromNow.toEpochMilli();
  9. System.out.println(millisAfter10Sec);
  10. // alarmManager.set(AlarmManager.RTC, millisAfter10Sec, pendingIntent);
  11. }
  12. }

输出:

  1. 1597837345043
  2. 1597837355043

了解更多关于 java.time<sup>*</sup> 的内容,可以参考 现代日期时间 API,以及 教程:日期时间

<sup>* 如果由于某种原因,你必须使用 Java 6 或 Java 7,你可以使用 ThreeTen-Backport 来将大部分 java.time 功能回溯到 Java 6 和 7。如果你正在进行一个 Android 项目,并且你的 Android API 级别仍然不符合 Java 8,可以查看 通过 desugaring 使用 Java 8+ API 以及 如何在 Android 项目中使用 ThreeTenABP
</sup>

英文:

Use Instant#toEpochMilli() and Instant#plusSeconds as shown below:

  1. import java.time.Instant;
  2. import java.time.Instant;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Instant now = Instant.now();
  6. System.out.println(now.toEpochMilli());
  7. // After 10 seconds
  8. Instant after10SecFromNow = now.plusSeconds(10);
  9. long millisAfter10Sec = after10SecFromNow.toEpochMilli();
  10. System.out.println(millisAfter10Sec);
  11. // alarmManager.set(AlarmManager.RTC, millisAfter10Sec, pendingIntent);
  12. }
  13. }

Output:

  1. 1597837345043
  2. 1597837355043

Learn more about java.time<sup>*</sup>, the modern Date-Time API, from Trail: Date Time.


<sup>* For any reason, if you have to stick to Java 6 or Java 7, you can use 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 How to use ThreeTenABP in Android Project.
</sup>

huangapple
  • 本文由 发表于 2020年8月19日 19:27:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/63486000.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定