java - 是否可以根据次数停止警报管理器
问题描述
请帮助..提前谢谢。
应用程序工作正常,但我需要在没有时间(整数)后停止闹钟 - 由我添加以便在 9 天后停止闹钟。获取输入 public void setRepeatAlarm(Context context, Calendar calendar, int ID, long RepeatTime) { mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// Put Reminder ID in Intent Extra
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra(ReminderEditActivity.EXTRA_REMINDER_ID, Integer.toString(ID));
mPendingIntent = PendingIntent.getBroadcast(context, ID, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Calculate notification timein
Calendar c = Calendar.getInstance();
long currentTime = c.getTimeInMillis();
long diffTime = calendar.getTimeInMillis() - currentTime;
// Start alarm using initial notification time and repeat interval time
mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + diffTime,
RepeatTime, mPendingIntent);
// Restart alarm if device is rebooted
ComponentName receiver = new ComponentName(context, BootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
如何根据次数停止重复警报。(例如:开始日期是 2020 年 12 月 11 日,结束日期是 2020 年 12 月 15 日 - 我将输入作为次数(3 次)而不是结束日期。)怎么做。请帮忙
谢谢..
解决方案
您可以在本地存储警报触发的次数和警报需要触发的次数,例如SharedPreferences
在每次执行之前检查次数是否更高。
另一种解决方案是以天为单位计算日期x
,然后在每次执行之前保存该日期SharedPreferences
检查今天是否是我们保存的日期,如果是 - 取消该警报。
class MySharedPreferences(context: Context) {
private val preferences: SharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE)
private val preferencesEditor: SharedPreferences.Editor = preferences.edit()
fun setDeadlineOfAlarm(days: Int) {
preferencesEditor.putInt(PREF_KEY_DEADLINE, days)
preferencesEditor.apply()
}
fun setCurrentDaysTriggered(days: Int) {
preferencesEditor.putInt(PREF_KEY_CURRENT_DAYS, days)
preferencesEditor.apply()
}
fun getDeadlineOfAlarm(): Int = preferences.getInt(PREF_KEY_DEADLINE, 0)
fun getCurrentDaysTriggered(): Int = preferences.getInt(PREF_KEY_CURRENT_DAYS, 0)
companion object {
private const val PREF_FILE_NAME = "AlarmPreferences"
private const val PREF_KEY_DEADLINE = "Alarm_Deadline"
private const val PREF_KEY_CURRENT_DAYS = "Alarm_Current_Days"
}
}
推荐阅读
- php - 第一次重定向后不显示 laravel 错误消息
- meteor - 从 Method 返回的 Meteor Minimongo 插入文档导致订阅错误
- java - 我想将数据库中的多个图像显示到 jsp 中(我正在映射 servlet),所以在 jsp m 中将显示在 img 标签的 src 中
- c++ - C++链表用户输入越界验证导致程序结束
- python - 不同的方法在 Django 中无法正常工作
- javascript - 如何修复 HasAttributes.php 中的 ErrorException
- ionic-framework - Ionic 4:我正在使用 Document Viewer 查看 pdf 文件。但它不工作
- android - 用于使用 Picasso 显示来自 URL 的图像的绑定适配器
- python - 我正在尝试创建一个对象,但应该工作的代码不起作用
- android-studio - 如果没有明确的 null 检查,编译器将无法识别不可为 null 的值