Java 提前几分钟安排了本地通知
这是祈祷时间本地通知。我们将收到通知,当它将匹配祈祷时间。 问题是,它总是迟到几分钟。 因此,为了克服困难,我们希望提前几分钟发出通知。Java 提前几分钟安排了本地通知,java,android,notifications,localnotification,Java,Android,Notifications,Localnotification,这是祈祷时间本地通知。我们将收到通知,当它将匹配祈祷时间。 问题是,它总是迟到几分钟。 因此,为了克服困难,我们希望提前几分钟发出通知。 if (targetCal.getTimeInMillis()>System.currentTimeMillis()) { int requestCode = (i) * 100; Intent intent = new Intent(context, NotificationReceive
if (targetCal.getTimeInMillis()>System.currentTimeMillis()) {
int requestCode = (i) * 100;
Intent intent = new Intent(context, NotificationReceiver.class);
intent.setAction("com.shiamomin.sjmmj.MY_NOTIFICATION");
intent.putExtra("notificationText", finalNotificationText);
intent.putExtra("requestCode", requestCode);
intent.putExtra("notificationType", notificationType);
Log.d("notificationType", String.valueOf(notificationType));
// Loop counter `i` is used as a `requestCode`
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
requestCode,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
mgrAlarm.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),
pendingIntent);
Log.d("time", String.valueOf(mgrAlarm));
Log.d("targetTime", String.valueOf(targetCal.getTime()));
intentArray.add(pendingIntent);
startNotificationReceiver.class
for (int i=0; i<prayerNames.size(); i++){
String prayerName = prayerNames.get(i);
if (prayerName.equals("Fajr")) {
String time = prayerTimes.get(0);
String[] array = time.split(":");
int hour = Integer.parseInt(array[0]);
String timeMinuit = array[1];
String[] array2 = timeMinuit.split(" ");
int minuit = Integer.parseInt(array2[0]);
String finalNotificationText = "View namaz time in " + locality + " location - " + prayerTimes.get(0);
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, hour);
calSet.set(Calendar.MINUTE, minuit);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
calendars.add(calSet);
notificationTextArrayList.add(finalNotificationText);
}
这是生成通知的地方。
if (targetCal.getTimeInMillis()>System.currentTimeMillis()) {
int requestCode = (i) * 100;
Intent intent = new Intent(context, NotificationReceiver.class);
intent.setAction("com.shiamomin.sjmmj.MY_NOTIFICATION");
intent.putExtra("notificationText", finalNotificationText);
intent.putExtra("requestCode", requestCode);
intent.putExtra("notificationType", notificationType);
Log.d("notificationType", String.valueOf(notificationType));
// Loop counter `i` is used as a `requestCode`
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
requestCode,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
mgrAlarm.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),
pendingIntent);
Log.d("time", String.valueOf(mgrAlarm));
Log.d("targetTime", String.valueOf(targetCal.getTime()));
intentArray.add(pendingIntent);
我应该做什么更改。避免日历
if (targetCal.getTimeInMillis()>System.currentTimeMillis()) {
int requestCode = (i) * 100;
Intent intent = new Intent(context, NotificationReceiver.class);
intent.setAction("com.shiamomin.sjmmj.MY_NOTIFICATION");
intent.putExtra("notificationText", finalNotificationText);
intent.putExtra("requestCode", requestCode);
intent.putExtra("notificationType", notificationType);
Log.d("notificationType", String.valueOf(notificationType));
// Loop counter `i` is used as a `requestCode`
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
requestCode,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE);
mgrAlarm.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),
pendingIntent);
Log.d("time", String.valueOf(mgrAlarm));
Log.d("targetTime", String.valueOf(targetCal.getTime()));
intentArray.add(pendingIntent);
好吧,我不做Android编程,你似乎没有给出足够的信息,但我可以告诉你这么多:可怕的日历类在几年前被现代的java.time类取代
要获得JVM当前默认时区的当前时刻,请使用并调用
将一天中的时间值作为对象而不是文本进行跟踪
LocalTime localTime = LocalTime.of( 15 , 00 ) ;
将当前时刻调整为一天中的该时间
ZonedDateTime nextPrayerZdt = nowZdt.with( localTime ) ;
请注意,java.time使用。我们不是改变(变异)原始对象,而是基于原始对象生成一个新对象,并使用值
确保这个新的时刻在未来
boolean isFuture = nextPrayerZdt.isAfter( nowZdt ) ;
boolean isFuture = beforeNextPrayerZdt.isAfter( nowZdt ) ;
如果你想提前几分钟,减去
ZonedDateTime beforeNextPrayerZdt = nextPrayerZdt.minusMinutes( 3 ) ;
并再次检查,这是在未来
boolean isFuture = nextPrayerZdt.isAfter( nowZdt ) ;
boolean isFuture = beforeNextPrayerZdt.isAfter( nowZdt ) ;
当您必须与尚未更新到java.time的旧代码进行接口时,您可以在遗留类和现代类之间来回转换。寻找添加到旧类中的新的to…
和from…
方法-至少在普通Java中,我不知道Android。见:
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
该项目现已启动,建议迁移到类
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类。Hibernate5和JPA2.2支持java.time
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- 带来了一些小功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- Android(26+)的更高版本捆绑了java.time类的实现
- 对于早期的Android(不确定为什么要调用
rajertimes.get(0);
,我认为应该是rajertimes.get(I);
。我有一个祈祷数组列表。我有5个集合5个祈祷。所以我使用For循环(int i=0;i@HB.嘿,为了更好地理解,我编辑了这个问题。字符串时间=祈祷时间。get(0);
?@HB字符串时间值=祈祷时间。get(0)的值是多少;祈祷时间在本例中是5:44AM谢谢,非常感谢你教我这个概念的方式。问题是应用程序处于最后阶段,所以在整个项目中很难将日历更改为ZoneDateTime。@MukhtarAli,您必须与尚未更新为java的旧代码交互。时间,您可以在n传统类和现代类。寻找新的到…
和从…
方法添加到旧类中-至少在普通Java中,我不知道Android。看和。哦,我知道了。我已经改变了。真的很高兴这个解决方案。谢谢您。@Basil Bourque