Framework7+Cordova应用:求支持条件判断的提醒插件替代方案
解决方案:结合后台任务插件实现条件式定时提醒
针对你的需求,推荐两种可行的方案,既能实现定时检查本地存储,又能管理通知/任务的调度:
方案一:cordova-plugin-background-task + 原本地通知插件
你可以保留原来的本地通知插件,搭配后台任务插件实现定时触发自定义逻辑(含本地存储检查),弥补原插件无法执行条件判断的缺陷:
步骤1:安装插件
cordova plugin add cordova-plugin-background-task cordova plugin add cordova-plugin-local-notifications
步骤2:注册每日定时任务
用户设置目标时间后,计算触发时间并注册周期性后台任务,任务触发时自动检查本地存储:
// 处理用户设置的时间(示例为17:00) const setTargetTime = (hour, minute) => { const target = new Date(); target.setHours(hour, minute, 0, 0); // 如果当前时间已过目标时间,自动顺延至次日 if (target < new Date()) target.setDate(target.getDate() + 1); return target; }; // 注册每日重复的后台任务 const scheduleDailyTask = (hour, minute) => { const target = setTargetTime(hour, minute); const delay = target.getTime() - Date.now(); cordova.plugins.backgroundTask.schedule({ delay: delay, period: 86400000, // 24小时重复一次 callback: () => { // 检查本地存储的点击标记 const hasClicked = localStorage.getItem('dailyBtnClicked') === 'true'; if (!hasClicked) { // 未点击则发送提醒 cordova.plugins.notification.local.schedule({ id: 1, title: '每日提醒', text: '请点击按钮完成今日操作' }); } else { // 已点击则取消可能存在的通知 cordova.plugins.notification.local.cancel(1); } // 重置当日标记(次日重新判断) localStorage.removeItem('dailyBtnClicked'); } }); }; // 调用:用户设置17:00时执行 scheduleDailyTask(17, 0);
步骤3:按钮点击逻辑
用户点击按钮时更新本地存储,并取消当前通知:
document.querySelector('#actionBtn').addEventListener('click', () => { localStorage.setItem('dailyBtnClicked', 'true'); cordova.plugins.notification.local.cancel(1); });
方案二:替代插件 cordova-plugin-schedule
该插件支持直接调度带自定义回调的定时任务,回调中可自由访问本地存储,同时支持取消已调度的任务,无需额外插件配合:
核心用法示例
# 安装插件 cordova plugin add cordova-plugin-schedule
// 注册每日任务 const taskId = cordova.plugins.schedule.schedule({ at: setTargetTime(17, 0), repeat: 'daily', callback: () => { const hasClicked = localStorage.getItem('dailyBtnClicked') === 'true'; if (!hasClicked) { // 这里可直接调用原生通知API或原插件发送提醒 cordova.plugins.notification.local.schedule({ id: 1, title: '每日提醒', text: '请点击按钮' }); } } }); // 取消任务(比如用户修改时间时) cordova.plugins.schedule.cancel(taskId);
注意事项
- Android和iOS对后台任务的限制不同,iOS后台任务执行时间有限,需尽量精简回调逻辑;
- 每日标记需在任务触发后重置,避免跨天判断错误;
- 测试时需注意平台权限配置,比如通知权限、后台运行权限。
内容的提问来源于stack exchange,提问作者user1756202
相关产品推荐
相关产品推荐

