我正在使用AlarmManager.setRepeating(int type,long triggerAtMillis,long intervalMillis,PendingIntent操作)方法来设置重复的Alarm。同时,我想将警报设置为仅重复3次,而不是像此方法那样无限期地重复。我怎么能做到这一点?
谢谢。
约瑟夫
答案 0 :(得分:1)
在SharedPreferences中创建一个名为 alarmCount 的新变量,我们将在AlarmReceiver 类中增加(在onReceive()方法中)。
SharedPreferences sharedPreferences = getSharedPreferences("TIMER", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("alarmCount", 1);
editor.commit();
我们使用以下代码设置闹钟 -
private void setAlarm() {
int alarmId = 0;
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra("alarmId", alarmId);
PendingIntent alarmIntent;
alarmIntent = PendingIntent.getBroadcast(context,
alarmId, intent,
0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
1000 * 60 * 1, alarmIntent);
Log.e("alarm", "set");
}
根据documentation -
根据您的应用,您可能希望包含取消功能 闹钟。要取消闹钟,请在闹钟管理器上调用cancel(), 传递PendingIntent你不再想要开火。
因此,一旦计数达到3,您就会将AlarmReceiver编码为取消警报。
然后,在我们的AlarmReceiver中,我们匹配之前使用的alarmId,并在计数达到3时取消相同的警报。
@Override
public void onReceive(Context context, Intent intent) {
int alarmId = intent.getExtras().getInt("alarmId");
PendingIntent alarmIntent;
alarmIntent = PendingIntent.getBroadcast(context, alarmId, new Intent(context, AlarmReceiver.class),
0);
//increment alarmCount
SharedPreferences sharedPreferences = context.getSharedPreferences("TIMER", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
int alarmCount = sharedPreferences.getInt("alarmCount", 1);
editor.putInt("alarmCount", alarmCount+1);
editor.commit();
Log.e("alarmCount ", alarmCount+"");
if(alarmCount == 3) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.cancel(alarmIntent);
Log.e("Alarm","Cancelled");
}
从sceenshot可以看出,取消后没有重复警报(没有日志)。
请告诉我这是否适合您。