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”将代表一天,而不是一秒钟。但这是出于测试目的。我已经确认在“i”中传递了正确的数据。我只是不确定这是否会产生三个不同的警报?

那么我在这里创建多个警报吗?还是每个循环都有效地替换了刚刚创建的循环?

4

1 回答 1

1

仅根据文档所说的,我想您将只有一个 AlarmManager:

“如果这个 Intent 计划已经有一个警报(两个 Intent 的相等性由 filterEquals(Intent) 定义),那么它将被删除并替换为这个。” 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 回答