1

该应用程序的计划是每天早上7点发出通知,该通知实际上已经工作。事情是,第一次启动应用程序时,它要求登录数据也一般工作,但如果用户没有足够快地提交,应用程序就会崩溃。PendingIntent似乎在初始化时开始

这是在MainActivity的代码,如果用户尚未提交运行:

Calendar calendar = Calendar.getInstance(); 
        calendar.set(Calendar.HOUR_OF_DAY, 7); 
        calendar.set(Calendar.MINUTE, 0); 
        calendar.set(Calendar.SECOND, 0); 

        Intent intent1 = new Intent(this, NotificationClass.class); 
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 100, intent1, 0); 
        AlarmManager am = (AlarmManager) getSystemService(MainActivity.this.ALARM_SERVICE); 
        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

我猜正在启动NotificationClass因为飞机坠毁的“源”是loadText.java的代码由NotificationClass启动。这个计划实际上只是在上午7点每天开始,如前所述。 有人知道这个问题或有想法吗?我已经尝试过不同的标志。

在此先感谢!

错误的logcat:

08-22 14:54:02.217 2762-2762/de.kurt.vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: de.kurt.vertretungsplan, PID: 2762 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'org.jsoup.select.Elements org.jsoup.nodes.Element.select(java.lang.String)' on a null object reference 
                      at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:112) 
                      at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:35) 
                      at android.os.AsyncTask.finish(AsyncTask.java:667) 
                      at android.os.AsyncTask.-wrap1(AsyncTask.java) 
                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
08-22 14:54:02.232 1247-1293/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property 
08-22 14:54:02.295 1462-3018/system_process E/EGL_emulation: tid 3018: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
+0

这真的不清楚问题是什么,但如果您要求立即报警解决方案的修复,请看看这里:https://stackoverflow.com/questions/36535575/android-prevent-immediate-触发的报警服务,如果报警时间,已经绕过换。 –

+0

谢谢:)。它现在有效! – quidproquo

回答

0

你得到一个Calendar实例,并设置时间为7:00:00。这将Calendar时间设置为当天的7:00:00。

然后你这样做:

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

设置告警,将在今天七点00分00秒,每天后熄灭,然后在七点00分00秒。假设您在7:00:00之后运行此代码,则警报将立即触发,因为闹钟时间已过去。

为了防止发生这种情况,您需要确保Calendar时间大于当前时间。如果不是,则在致电am.setRepeating()之前,您应该在Calendar时间内添加一天。

As @MikeM。建议,详见android prevent immediate trigger of alarm service if alarm time has passed for the day

+0

谢谢,就是这样! – quidproquo