2012-05-02 6 views
3

毎週繰り返すアラームの数を設定する必要があります。ユーザーが何らかのクラス(学術的なアプリケーション)にいるときに自動的に電話を入れ、クラス終了する。複数のアラームをAndroidで追跡する

すでにアラームが作成されていますが、ユーザーがこの機能を無効にすると、すべてのアラームを無効にする方法が必要です。私は、AlarmManager.cancel()メソッドに同じパラメータを渡して、それを実行する必要があることも知っていますが、ここでの問題は次のとおりです。

ユーザはクラスをキャンセルしてクラスに登録できます)、それは更新され、現在のクラスだけを保持するDBに反映されます。だから、私がPendingIntentを複製できない場合、どうしたらクラスをキャンセルすることができますか?

私が見ている解決策は、現在のアラームを追跡するためのdbテーブルを作成してから、それらを完全に制御し、別の方法は、クラスリストが更新されたときにすべてのアラームをキャンセルしてリセットすることですそのため、かなりの時間がかかりますが、3番目ですが友好的ではないオプションは、ユーザーが電話を起動するのを待つだけで、アラームをリセットするときに必要なものを設定します(この起動動作が間違っている場合は正しい)。私が試してみなければならない第4の選択肢があるか、またはこれらのうちの1つが十分な場合はありますか?

答えて

3

最初に複数のアラームを設定する必要はありません。単にNEXTアラームを設定してから、そのアラームが発生すると、次の新しいアラームを設定します。また、アラームを1つだけ考えているため、電話機が再起動された場合に失われた場合でも、アラームを再度設定することが容易になります。

この小さなルーチンを使用してアラームを設定します。 Setパラメータの値により、アラームが設定されているかキャンセルされているかが決まります。

public static void SetMyAlarm(Context c, long AlarmTime, Boolean Set) { 
    Intent intent = new Intent(c, AlarmReceiver.class); // The broadcast receiver that will handle my alarm 

    int UniqueID =8192; // id for this specific alarm, use a different id for each separate alarm 

    PendingIntent sender = PendingIntent.getBroadcast(c, UniqueID, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE); 
    if (Set) { 
     am.set(AlarmManager.RTC_WAKEUP, AlarmTime, sender); 
    } else { 
     am.cancel(sender); 
    } 
} 
+0

ありがとう、実際にはそれを行うにはかなりスマートな方法です。このようにして、SharedPreferencesを使用してアクティブなアラームを簡単に追跡できます。これをここで試してみます –

+0

賢明ではありませんが、メソッドシグネチャのブール値はプリミティブでなければなりません。そうでない理由はありません。 –

+0

それは実際には非常にペダンティンですが、はいそれはすべきです。私はあなたがこのサイトで多くの、多くのタイプミスを見つけることを確信しています。 4年前、私は彼が私を助けようとしていた間に私が間違って首都BをタイプしたことをOPが気にかけなかったと思う。 – Kuffs

関連する問題