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>
感謝您的回答。我試圖在清單中實現你的第三個項目符號,並將上面的代碼更新到底部。現在,我每次重啓設備時都會收到通知,而不是等待一小時的確切時間。對此有何想法? – KickingLettuce
當然,您必須進行計算以確定何時安排警報! –
做了更多的研究,看起來我需要製作一個單獨的「啓動接收器」來在設備重新啓動時進行這些計算。它是否正確? – KickingLettuce