Android Alarm Managerでは、繰り返しのない複数のアラームをスケジュールするにはどうすればよいでしょうか?私は 'setRepeating'関数を使用することはできません。アラームは繰り返しパターンを持たないからです。Alarm Manager - 複数の非繰り返しイベントをスケジュールする
私はアラーム時刻をSqliteデータベーステーブルに格納しており、このテーブルから日時を選択してアラームを設定する必要があります。
ループ内で異なるアラームを設定すると、最後のアラームだけが保持されます。 投稿から読む:How can create more than one alarm?
固有のIDをインテントに添付し、個々のアラームイベントを設定するように指示します。しかし、それは私にとってはうまくいかなかった。
この一意のIDを処理するためにマニフェストファイルに追加する必要があるものはありますか?
活動のコードは「RegularSchedule」であり、それが唯一のアラームイベントを作成します。
while (notifCursor.moveToNext()) {
Intent intent = new Intent(RegularSchedule.this,
RepeatingAlarm.class);
// The cursor returns first column as unique ID
intent.setData(Uri.parse("timer:" + notifCursor.getInt(0)));
PendingIntent sender = PendingIntent.getBroadcast(
RegularSchedule.this, 0, intent, 0);
// Setting time in milliseconds taken from database table
cal.setTimeInMillis(notifCursor.getLong(1));
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
}
詳細やコードスニペットが必要な場合は私に知らせてください。
マニフェストファイル(ここではRepeatingAlarm BroadcastReceiverを拡張):
<receiver android:name=".user_alerts.RepeatingAlarm" android:process=":remote" />
<activity android:name=".user_alerts.RegularSchedule"
android:label="@string/reg_schedule_title" android:theme="@android:style/Theme.Light">
</activity>
RepeatingAlarm:
public class RepeatingAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
.......
// The PendingIntent to launch our activity if the user selects this notification
Intent notificationIntent = new Intent (context, DisplayReminder.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
// Set the info for the views that show in the notification panel.
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_LIGHTS;
mNotificationManager.notify(2425, notification);
私のための鍵は、この行です:int.setData(Uri.parse( "timer:" + notifCursor.getInt(0)));インテントが一意であることを保証し、その後のAlarmManager.setの呼び出しは、前のアラームをキャンセルしません。 –
ありがとうございました@JonathonHorsman私は独自の新しい値を手渡し、スレッドを保存して共有設定に保存するためにこの[小さなクラス](https://gist.github.com/deadfalkon/5a579aca2179cab10e7b)を作成しました。あなたのアプリが殺された場合)。 – volkersfreunde
@inder:素晴らしい仕事の男! – mudit