0

これは機能しますか?

  public void setRepeatingAlarm() {

    ArrayList<Integer> AlarmDays = datasource.getDays();
    final int _id = (int) System.currentTimeMillis();

    Log.d("AlarmManageDebt", String.valueOf(AlarmDays));

    for (int i : AlarmDays) {

        Calendar cal = Calendar.getInstance();
        if (cal.get(Calendar.SECOND) >= 30)
            cal.add(Calendar.MINUTE, 1);
        cal.set(Calendar.SECOND, Integer.valueOf(i));

        Intent intent = new Intent(this, TimeAlarm.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, _id,
                intent, PendingIntent.FLAG_CANCEL_CURRENT);
        am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                60 * 1000, pendingIntent);
    }
}

私はpendingIntentの一意のIDを持っていますが、アラームで異なるのは、データベースの行に応じて新しい秒数を与える「i」変数だけです(最終的には、これは毎日の通知になり、「i」は1日を表します) 、秒ではありません。ただし、これはテスト用です。「i」で正しいデータが渡されていることを確認しました。これにより3つの異なるアラームが作成されるかどうかはわかりません。

では、ここで複数のアラームを作成していますか?または、各ループは、作成したばかりのループを効果的に置き換えていますか?

4

1 に答える 1

1

ドキュメントの内容に基づいて、AlarmManagerは1つだけになると思います。

「スケジュールされたこのインテントのアラームがすでにある場合(filterEquals(Intent)によって定義されている2つのインテントが等しい場合)、それは削除され、このインテントに置き換えられます。」 http://developer.android.com/reference/android/app/AlarmManager.html

インテントの同等性の決定方法は次のとおりです。http: //developer.android.com/reference/android/content/Intent.html#filterEquals (android.content.Intent )

これに基づいて、PendingIntentの一意のIDがある場合でも、いいえと言います。

于 2012-06-08T20:53:39.583 に答える