首页 > 解决方案 > 是否可以根据次数停止警报管理器

问题描述

请帮助..提前谢谢。

应用程序工作正常,但我需要在没有时间(整数)后停止闹钟 - 由我添加以便在 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 次)而不是结束日期。)怎么做。请帮忙

谢谢..

标签: javaandroidalarmmanager

解决方案


您可以在本地存储警报触发的次数和警报需要触发的次数,例如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"
    }
}

推荐阅读