0

ユーザーはさまざまなアラームを作成できます。したがって、いつアラームを鳴らすかはユーザー次第であり、彼は複数のアラームを鳴らすことができます。私はスケジュールされたすべてのアラームをデータベースに保持し、さらに参照できるようにユーザーに表示します。以下は私のコードです。

if("CREATEONCE".equals(strparam1))
    {
         am.set(AlarmManager.RTC_WAKEUP, l2, pi);// l2 is time in millis
    }else if("CREATEREPEAT".equals(strparam1))
        {

    am.setRepeating(AlarmManager.RTC_WAKEUP, l2, 86400000 , pi); //l2 is time in millis
    }

これがアラームを設定するコードです。ユーザーは複数のアラームを設定できます。たとえば、彼はアラームを7.00 am1 回、8.00 am1 回、および9.00 am dialy. したがって、 foronce alarmsコードは if ブロックに行き、 for 、コードはrepeat dailyコード内の else if ブロックに行きます。

上記の 3 つのアラームが でユーザーによって設定されている場合6.00 am。アラームを設定した直後にデバイスを再起動すると、アラーム全体がトリガーされません。

したがって、 post1post2など、これに関する多くの投稿を読みました。それらはすべてbroadcast receiver、デバイスが再起動されたことを知るために使用しただけです。ブロードキャスト レシーバーがデバイスが再起動されたというヒントを受信した後、すべてのアラームを機能させるために、sqlite データベースから情報を取得して上記のコードをもう一度繰り返す必要がありますか? もしそうなら、誰かが放送受信機からそれを行う方法を手伝ってもらえますか? コード スニペットを歓迎します

ユーザーが を設定した場合50 alarms、50 個のアラームすべての情報を取得して再度設定するのは長いプロセスではありませんか?

4

1 に答える 1

3

アラームをどのように保存しているかわかりません。しかし、システム レベルのアラームを最も早く来るアラームに設定するだけで十分だと思います。次に、それがトリガーされたら、次にトリガーする最も早いアラームのアラームを再度設定します。

AlarmSetting 呼び出しをサービスに入れてから、ブロードキャスト レシーバーから呼び出すことをお勧めします。

public class AlarmResetReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
       //your code to set up alarms
    }
}

マニフェストでアラームを再度設定する他の条件もあります

<receiver android:name=".receivers.AlarmResetReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.TIME_SET" />
            <action android:name="android.intent.action.TIMEZONE_CHANGED" />
            <action android:name="android.intent.action.LOCALE_CHANGED" />
        </intent-filter>
    </receiver>
于 2013-05-06T10:42:17.120 に答える