私のアプリでは、データベースに行を追加し、データベースの列の1つに指定された時刻に毎日繰り返すようにアラームイベントを設定する必要があります。私はすでにいくつかのコードを持っていますが、指定された時刻にアラームイベントを引き起こします。ここに私のコードです:Android:AlarmManagerで定期アラームを設定する
public class Add_reminder extends Activity {
AlarmManager am;
int hours, minutes;
REMIND_DB db;
Calendar calendar;
Cursor cursor;
Button button;
public void onCreate(Bundle savedInstanceState) {
//The usual code in the beginning of onCreate
//I load db from extended Application class as global since i use it in more
//Activities. Ints hours and minutes is set by user interaction
calendar = Calendar.getInstance();
am = (AlarmManager) getSystemService(ALARM_SERVICE);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
db.open();
db.insertReminder(-- parameters for database --);
cursor = db.getAllReminders();
cursor.moveToLast();
calendar.set(Calendar.HOUR, hours);
calendar.set(Calendar.MINUTE, minutes);
Intent intent = new Intent(Add_reminder.this, ReminderAlarm.class);
intent.putExtra("id_of_db_row", cursor.getInt(0));
PendingIntent pi = PendingIntent.getActivity(Add_reminder.this,
cursor.getInt(0), intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
24*3600*1000, pi);
db.close()
}
});
}
}
データベースは正しく更新されますが、ReminderActivityは指定された時間に決して開始しません。何が間違っているのか分かりません。 PendingIntentでアクティビティを開始するのではなく、BroadcastReceiverを使っていくつかのサンプルコードを見ましたが、これも正しく動作するはずです。誰が何が間違っているかも知っていますか?
2番目の質問は、別のアクティビティからいくつかのアラームを追加または削除するときに、同じインスタンスのAlarmManagerが必要な場合ですか、必要なすべてのアクティビティで別のAlarmManagerを宣言するだけですか?
ありがとうございました!
私は今朝私の電話を見て、私は希望の活動が開始されたことに気づいた!問題は24時間形式のHOUR_OF_DAYではなく、12時間形式のHOURを使用したため、12時間後にリマインダーが思い出されたためです。主なアクティビティには、アクティビティが開始された後に1回だけ実行されるコードブロックがあります。データベースのデータを使用してアラームを再登録できますか?ユーザーがアプリを再起動しただけで、電話機自体を再起動しない場合は、アラームを置き換えますか?それとも、それはちょうど重複しますか?ありがとうございました。 –
進捗状況:まだ、活動がどこにも現れないようにすることは、一般的には悪い考えです。私が言ったように、放送受信機とサービスを使用してください。ユーザーとの対話が必要な場合は、通知を送信して、ユーザーにアクティビティーを開始させます。同等の 'PendingIntent'アラームを使用すると、重複しないで上書きされます。 –
大きな助けをしてくれてありがとう:私はあなたが言ったように私はBroadcastReceiverを使用しています、このタイミングの問題はただちにでした:) –