Android设置多个警报
我试图实现一个Android应用程序,需要多次报警(或提醒)。
我已经search,但最近我发现是固定数量的警报设置,我猜这个例子没有工作。
我想知道是否存在一种dynamic设置多个警报的方法,如一系列警报,然后在特定的时间戳中触发这些警报。
我希望这个问题是明确的:)
如果你想设置多个警报(重复或单一),那么你只需要用不同的requestCode
创build他们的PendingIntent
。 如果requestCode
是相同的,那么新的警报将覆盖旧警报。
以下是创build多个单一警报并将其保存在ArrayList
。 我将PendingIntent
放在arrays中,因为这是您需要取消警报的方法。
// context variable contains your `Context` AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); for(i = 0; i < 10; ++i) { Intent intent = new Intent(context, OnAlarmReceiver.class); // Loop counter `i` is used as a `requestCode` PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); // Single alarms in 1, 2, ..., 10 minutes (in `i` minutes) mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60000 * i, pendingIntent); intentArray.add(pendingIntent); }
另外,看到这个问题: 如何在Android中一次设置多个警报? 。
您可以设置闹钟的重复次数:
在这种情况下:
public void AddAlarm(int requestCode,MutableDateTime dueDate,int repeat) { Intent intent = new Intent(context, AlarmReceiver.class); intent.putExtra(Constants.RECORD_ID, requestCode); intent.putExtra("REPEAT", repeat); PendingIntent operation = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_ONE_SHOT ); MutableDateTime due = dueDate.toMutableDateTime(); switch(repeat){ case NO_REPEAT: due.addMinutes(0); break; case DAILY: due.addDays(1); break; case WEEKLY: due.addWeeks(1); break; case MONTHLY: due.addMonths(1); break; case MONTHLY_2: due.addWeeks(5); break; case YEARLY: due.addYears(1); break; } due.add(-(dueDate.getMillis())); due.setSecondOfMinute(0); dueDate.setSecondOfMinute(0); alarm.cancel(operation); alarm.set(AlarmManager.RTC_WAKEUP, dueDate.getMillis(), operation); alarm.setRepeating(AlarmManager.RTC_WAKEUP, dueDate.getMillis(), due.getMillis(), operation); }
要dynamic设置多个警报,我使用的方法是创build一个警报。 然后在我的闹钟设置类中,一个静态整数(用作请求码)被初始化,每当我点击主要活动中的“添加闹钟”button时,每次从我的主要活动中增加一个。 例如
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void addAlarmClick(View v) { AlarmActivity.broadcastCode++; startActivity(new Intent(this, AlarmActivity.class)); } }
AlarmActivity.java
public class AlarmActivity extends AppCompatActivity {` public static int broadcastCode=0; /*some code here*/ Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class); pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, broadcastCode, myIntent, 0);
我希望这会有所帮助。