以下のコードでは、これまでのところ私が望んでいることの主なことを行っています: - 同時に1時間ごとに繰り返します
次の項目を確認するために何をする必要があるか、または何をする必要があるかを確認できますか?
(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>