Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提前几分钟安排了本地通知_Java_Android_Notifications_Localnotification - Fatal编程技术网

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