1

在下面的代碼,它是做什麼的我想至今爲止主要的事情: - 在同一時間重複每隔一小時AlarmManager爲Android

有人可以驗證是否或什麼,我需要做的,以確保的以下項目? (1)警報最終將基於一個月的天數。只要它們在喚醒手機時關閉(以節省電池)。這不是具體的小時或分鐘。只有一天。這怎麼能實現? (2)如果活動被破壞或手機重新啓動,我不確定我的AlarmManager是否保持清醒狀態?

(3)最後,此代碼重複應用程序啓動(從而覆蓋所有現有AlarmManagers每一次,這是一個做事的正確方法,或者我應該檢查,看看是否報警存在

for (int i : AlarmDays) { 

     if (String.valueOf(i) == null) { 
      continue; 
     } 

     Calendar cal = Calendar.getInstance(); 
     if (cal.get(Calendar.MINUTE) >= i) 
      cal.add(Calendar.HOUR, 1); 
     cal.set(Calendar.MINUTE, i); 

     Intent intent = new Intent(this, TimeAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, i, 
       intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
       60 * 60 * 1000, pendingIntent); 
    } 

// TimeAlarm.class 
public void onReceive(Context context, Intent intent) { 


    String DebtName = null; 

    nm = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    CharSequence from = "Payment Due"; 
    CharSequence message = "Open App and Update your Balance"; 
    Intent notificationIntent = new Intent(context, ManageDebts.class); 
    notificationIntent.getExtras(); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
      notificationIntent, 0); 
    Notification notif = new Notification(R.drawable.icon, "Pay " 
      + DebtName + " today!", System.currentTimeMillis()); 
    notif.setLatestEventInfo(context, from, message, contentIntent); 
    notif.defaults = Notification.DEFAULT_SOUND 
      | Notification.DEFAULT_LIGHTS; 
    nm.notify(1, notif); 
} 

,並在我的清單我的應用程序標籤:

編輯:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<Application>   
    <receiver 
     android:name=".TimeAlarm" 
     android:enabled="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 
</Application> 

回答

1

的AlarmManager將個人正在重新啓動電話。但是,它會在Android調度程序中殺死的應用程序中持續存在。正因爲如此,你基本上需要:

  • 存儲您的日程安排的地方,並拿出一個調度算法來決定下一次你想要一個AlarmManager火。
  • 每次發出警報時,都要安排一個新的警報。
  • 啓動時啓動AlarmManager,通過捕獲BOOT_COMPLETED廣播。
+0

感謝您的回答。我試圖在清單中實現你的第三個項目符號,並將上面的代碼更新到底部。現在,我每次重啓設備時都會收到通知,而不是等待一小時的確切時間。對此有何想法? – KickingLettuce

+0

當然,您必須進行計算以確定何時安排警報! –

+0

做了更多的研究,看起來我需要製作一個單獨的「啓動接收器」來在設備重新啓動時進行這些計算。它是否正確? – KickingLettuce