[文章]codelabs-ClockFACardDome学习体验分享

阅读量0
0
4
一、总述

项目名称:  ClockFACardDome
项目语言:  JAVA
源代码下载地址:https://gitee.com/openharmony/codelabs.git
工具:deveco studio

效果如下
   



二、学习体验步骤

第一步 下载代码
可以到https://gitee.com/openharmony/codelabs.git 网址直接下载;
也可以使用git下载,到命令行输入:
git clone https://gitee.com/openharmony/codelabs.git

第二步 打开项目代码
下载解压获得的文件夹中含有其他性下项目代码使用device stdio打开名为
ClockFACardDome的文件。

第三步 运行
登录华为开发者账号打开手机模拟器运行项目即可。

项目介绍
时钟FA卡片应用主要介绍了如何创建、更新和删除卡片,对象关系映射型数据库的使用以及如何启动计时器服务,整个工程的代码结构如下:

· database:存放对象关系映射数据库相关对象的目录。
o Form:卡片表对象,用于存储卡片id、卡片名称以及卡片规格。
o FormDatabase:卡片数据库对象,用于创建卡片数据库。
· slice:存放应用FA的目录。
o ClockCardSlice:应用主页面。
· utils:存放工具类的目录。
o ComponentProviderUtils:提供获取ComponentProvider对象的方法,用于卡片组件的更新。
o DatabaseUtils:提供对数据库相关操作的方法。
o DateUtils:提供日期相关操作的方法。
o LogUtils:日志工具类。
· MainAbility:主程序入口,由DevEco Studio生成,开发者需要重写创建、删除卡片等方法。
· MyApplication:DevEco Studio生成,无需变更。
· TimerAbility:时钟更新Service Ability。
关键代码:(卡片更新部分)

public class TimerAbility extends Ability {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Demo");
    private static final long SEND_PERIOD = 1000L;
    private static final int NOTICE_ID = 1005;
    private DatabaseHelper helper = new DatabaseHelper(this);
    private OrmContext connect;
    @Override
    public void onStart(Intent intent) {
        HiLog.info(LABEL_LOG, "TimerAbility::onStart");
        connect = helper.getOrmContext("FormDatabase", "FormDatabase.db", FormDatabase.class);
        startTimer();
        super.onStart(intent);
    }
    private void notice() {
        // 创建通知
        NotificationRequest request = new NotificationRequest(NOTICE_ID);
        request.setAlertOneTime(true);
        NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent();
        content.setText(DateUtils.getCurrentDate("yyyy-MM-dd HH:mm:ss"));
        NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);
        request.setContent(notificationContent);
        // 绑定通知
        keepBackgroundRunning(NOTICE_ID, request);
    }
    // 卡片更新定时器,每秒更新一次
    private void startTimer() {
        Timer timer = new Timer();
        timer.schedule(
                new TimerTask() {
                    @Override
                    public void run() {
                        updateForms();
                        notice();
                    }
                },
                0,
                SEND_PERIOD);
    }
    private void updateForms() {
        // 从数据库中获取卡片信息
        OrmPredicates ormPredicates = new OrmPredicates(Form.class);
        List<Form> formList = connect.query(ormPredicates);
        // 更新时分秒
        if (formList.size() <= 0) {
            return;
        }
        for (Form form : formList) {
            // 遍历卡片列表更新卡片
            ComponentProvider componentProvider = ComponentProviderUtils.getComponentProvider(form, this);
            try {
                Long updateFormId = form.getFormId();
                updateForm(updateFormId, componentProvider);
            } catch (FormException e) {
                // 删除不存在的卡片
                DatabaseUtils.deleteFormData(form.getFormId(), connect);
                HiLog.error(LABEL_LOG, "onUpdateForm updateForm error");
            }
        }
    }
    @Override
    public void onBackground() {
        super.onBackground();
        HiLog.info(LABEL_LOG, "TimerAbility::onBackground");
    }
    @Override
    public void onStop() {
        super.onStop();
        HiLog.info(LABEL_LOG, "TimerAbility::onStop");
    }
}

三、完整代码地址:
https://gitee.com/jltfcloudcn/jump_to/tree/master/ClockFACardDemo
附件:

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友