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