【发布时间】:2019-07-31 15:20:04
【问题描述】:
我需要向用户显示不同内容的重复通知。我使用 BroadcastReceiver 并通过 AlarmManager 设置通知。
我知道我可以使用AlarmManager.setRepeating,但是每次显示的内容都是一样的。
例如,我需要根据用户选择的一周每周显示一次通知。在每个通知中,我需要显示当前周和一些不同的文本。我在 StackOverflow 上没有找到解决方案。
这里是相关代码
long timeInMills = mSharedPreferences.getLong("key_millis", 0);
Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.setTimeInMillis(timeInMills);
alarmCalendar.set(Calendar.HOUR_OF_DAY, 10);
alarmCalendar.set(Calendar.MINUTE, 0);
int currentWeek = (int) Utils.getTotalWeeks(timeInMills);
if (currentWeek <= 20) {
AlarmHelper alarmHelper = AlarmHelper.getInstance();
for (int i = currentWeek + 1; i < 21; i++) {
alarmCalendar.add(Calendar.DATE, 7 * (currentWeek + 1));
long time = alarmCalendar.getTimeInMillis();
alarmHelper.setWeekAlarm(getApplicationContext(), WeekReceiver.class, time, i, i);
}
}
AlarmHelper 类如下。
public class AlarmHelper {
private static AlarmHelper instance;
public static AlarmHelper getInstance() {
if (instance == null) {
instance = new AlarmHelper();
}
return instance;
}
public void setWeekAlarm(Context context, Class<?> receiver, long time, int week, int req_code) {
Intent intent = new Intent(context, receiver);
intent.putExtra("week_title", "your week " + week);
intent.putExtra("req_code", req_code);
//cancel already existed alarm
cancelWeekAlarm(context, receiver, req_code);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, req_code, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
public void cancelWeekAlarm(Context context, Class<?> receiver, int req_code) {
Intent intent = new Intent(context, receiver);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, req_code, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
pendingIntent.cancel();
}
}
问题是,如果用户在第一周,那么会创建 20 个通知,我认为我的方法不是很好,也许你可以帮我找到另一个解决方案?
【问题讨论】:
标签: java android push-notification broadcastreceiver alarmmanager