提醒列表模块 Cordova 与 OpenHarmony 混合开发实战

📌 概述

提醒列表模块展示了所有已创建的提醒。该模块集成了 Cordova 框架与 OpenHarmony 原生能力,提供了完整的提醒管理功能。用户可以查看所有提醒、启用或禁用提醒、编辑提醒和删除提醒。模块支持提醒的分类显示和搜索。

🔗 完整流程

第一步:提醒数据加载

当用户进入提醒列表页面时,应用会从数据库中加载所有提醒。应用会按提醒类型或状态进行分类显示。

第二步:提醒展示与交互

数据加载完成后,应用会将提醒显示为列表形式。每个提醒显示提醒名称、时间和状态。用户可以点击提醒进行编辑或删除。

第三步:提醒状态管理

用户可以启用或禁用提醒。应用会实时更新提醒的状态。当提醒被触发时,应用会通过原生通知系统发送提醒。

🔧 Web 代码实现

HTML 提醒列表

html 复制代码
<div id="reminder-list-page" class="page">
    <div class="page-header">
        <h1>提醒列表</h1>
        <button class="btn btn-primary" onclick="navigateTo('create-reminder')">+ 创建提醒</button>
    </div>
    
    <div class="reminder-toolbar">
        <input type="text" id="reminder-search" class="search-box" placeholder="搜索提醒...">
        <select id="reminder-filter" onchange="filterReminders()">
            <option value="">全部</option>
            <option value="enabled">已启用</option>
            <option value="disabled">已禁用</option>
        </select>
    </div>
    
    <div id="reminders-list" class="reminders-list">
        <!-- 提醒项动态生成 -->
    </div>
</div>

提醒列表页面包含搜索和筛选功能。

提醒列表逻辑

javascript 复制代码
let allReminders = [];

async function renderReminderList() {
    try {
        allReminders = await db.getReminders();
        
        const listContainer = document.getElementById('reminders-list');
        listContainer.innerHTML = '';
        
        if (allReminders.length === 0) {
            listContainer.innerHTML = '<div class="no-data"><p>暂无提醒</p></div>';
            return;
        }
        
        allReminders.forEach(reminder => {
            const reminderEl = createReminderElement(reminder);
            listContainer.appendChild(reminderEl);
        });
        
        // 绑定搜索事件
        document.getElementById('reminder-search').addEventListener('input', function(e) {
            const keyword = e.target.value.toLowerCase();
            const filtered = allReminders.filter(r =>
                r.name.toLowerCase().includes(keyword)
            );
            renderReminderItems(filtered);
        });
        
    } catch (error) {
        console.error('Failed to render reminders:', error);
        showToast('加载提醒失败', 'error');
    }
}

function createReminderElement(reminder) {
    const div = document.createElement('div');
    div.className = 'reminder-item';
    div.dataset.reminderId = reminder.id;
    
    const time = new Date(reminder.time).toLocaleTimeString('zh-CN');
    const statusClass = reminder.enabled ? 'enabled' : 'disabled';
    const statusText = reminder.enabled ? '已启用' : '已禁用';
    
    div.innerHTML = `
        <div class="reminder-info">
            <div class="reminder-name">${reminder.name}</div>
            <div class="reminder-time">${time}</div>
            <div class="reminder-status ${statusClass}">${statusText}</div>
        </div>
        <div class="reminder-actions">
            <button class="btn-icon" onclick="toggleReminder(${reminder.id})" title="切换">🔔</button>
            <button class="btn-icon" onclick="editReminder(${reminder.id})" title="编辑">✏️</button>
            <button class="btn-icon" onclick="deleteReminder(${reminder.id})" title="删除">🗑️</button>
        </div>
    `;
    
    return div;
}

function renderReminderItems(reminders) {
    const listContainer = document.getElementById('reminders-list');
    listContainer.innerHTML = '';
    
    if (reminders.length === 0) {
        listContainer.innerHTML = '<div class="no-data"><p>暂无提醒</p></div>';
        return;
    }
    
    reminders.forEach(reminder => {
        const reminderEl = createReminderElement(reminder);
        listContainer.appendChild(reminderEl);
    });
}

async function toggleReminder(reminderId) {
    try {
        const reminder = await db.getReminder(reminderId);
        await db.updateReminder(reminderId, { enabled: !reminder.enabled });
        
        if (window.cordova) {
            cordova.exec(
                null, null,
                'TeaLogger',
                'logEvent',
                ['reminder_toggled', { reminderId: reminderId, enabled: !reminder.enabled }]
            );
        }
        
        showToast('提醒已更新', 'success');
        renderReminderList();
    } catch (error) {
        console.error('Failed to toggle reminder:', error);
        showToast('更新失败', 'error');
    }
}

async function deleteReminder(reminderId) {
    if (!confirm('确定要删除这个提醒吗?')) {
        return;
    }
    
    try {
        await db.deleteReminder(reminderId);
        
        if (window.cordova) {
            cordova.exec(
                null, null,
                'TeaLogger',
                'logEvent',
                ['reminder_deleted', { reminderId: reminderId }]
            );
        }
        
        showToast('提醒已删除', 'success');
        renderReminderList();
    } catch (error) {
        console.error('Failed to delete reminder:', error);
        showToast('删除失败', 'error');
    }
}

function filterReminders() {
    const filter = document.getElementById('reminder-filter').value;
    const filtered = filter === '' ? allReminders : 
                    filter === 'enabled' ? allReminders.filter(r => r.enabled) :
                    allReminders.filter(r => !r.enabled);
    renderReminderItems(filtered);
}

这段代码实现了提醒列表功能。renderReminderList() 加载并渲染提醒列表。createReminderElement() 创建提醒项。toggleReminder() 启用或禁用提醒。deleteReminder() 删除提醒。

🔌 OpenHarmony 原生代码

提醒通知管理

typescript 复制代码
// entry/src/main/ets/plugins/ReminderNotification.ets
import { notificationManager } from '@kit.NotificationKit';

export class ReminderNotification {
    static sendNotification(reminder: Reminder): void {
        const request: notificationManager.NotificationRequest = {
            id: reminder.id,
            content: {
                contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
                normal: {
                    title: reminder.name,
                    text: `该喝茶了!`,
                    additionalText: new Date().toLocaleTimeString('zh-CN')
                }
            }
        };
        
        notificationManager.publish(request, (err) => {
            if (err) {
                hilog.error(0xFF00, 'ReminderNotification', `Failed to send notification: ${err}`);
            } else {
                hilog.info(0xFF00, 'ReminderNotification', `Notification sent for reminder: ${reminder.name}`);
            }
        });
    }
    
    static cancelNotification(reminderId: number): void {
        notificationManager.cancel(reminderId, (err) => {
            if (err) {
                hilog.error(0xFF00, 'ReminderNotification', `Failed to cancel notification: ${err}`);
            }
        });
    }
}

interface Reminder {
    id: number;
    name: string;
    time: string;
    enabled: boolean;
}

这个类管理提醒通知。sendNotification() 发送提醒通知。cancelNotification() 取消提醒通知。

📝 总结

提醒列表模块展示了如何在 Cordova 框架中实现提醒管理功能。通过 Web 层的用户界面和交互,结合原生层的通知管理,为用户提供了完整的提醒管理体验。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

相关推荐
山岚的运维笔记2 分钟前
SQL Server笔记 -- 第16章:MERGE
java·笔记·sql·microsoft·sqlserver
Andy Dennis8 分钟前
一文漫谈设计模式之创建型模式(一)
java·开发语言·设计模式
belldeep9 分钟前
Java:Tomcat 9 和 mermaid.min.js 10.9 上传.csv文件实现 Markdown 中 Mermaid 图表的渲染
java·tomcat·mermaid·去除flexmark
AutumnorLiuu16 分钟前
C++并发编程学习(二)—— 线程所有权和管控
java·c++·学习
Demon_Hao17 分钟前
JAVA缓存的使用RedisCache、LocalCache、复合缓存
java·开发语言·缓存
踏雪羽翼19 分钟前
android 解决混淆导致AGPBI: {“kind“:“error“,“text“:“Type a.a is defined multiple times
android·java·开发语言·混淆·混淆打包出现a.a
lang2015092820 分钟前
Tomcat Maven插件:部署与卸载的架构设计
java·tomcat·maven
csj5034 分钟前
安卓基础之《(21)—高级控件(3)翻页类视图》
android
2501_9159184138 分钟前
中小团队发布,跨平台 iOS 上架,证书、描述文件创建管理,测试分发一体化方案
android·ios·小程序·https·uni-app·iphone·webview
serve the people39 分钟前
python环境搭建 (六) Makefile 简单使用方法
java·服务器·python