codelabs-ClockFACardDome学习体验分享 原创

鸿蒙时代
发布于 2021-7-17 10:49
浏览
0收藏

一、总述

 

项目名称:  ClockFACardDome

项目语言:  JAVA

源代码下载地址:https://gitee.com/openharmony/codelabs.git

工具:deveco studio

 

效果如下

    codelabs-ClockFACardDome学习体验分享-鸿蒙开发者社区

 

codelabs-ClockFACardDome学习体验分享-鸿蒙开发者社区

 

二、学习体验步骤

          

第一步 下载代码

可以到https://gitee.com/openharmony/codelabs.git 网址直接下载;

也可以使用git下载,到命令行输入:

git clone https://gitee.com/openharmony/codelabs.git

 

第二步 打开项目代码

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

ClockFACardDome的文件。

 

第三步 运行

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

 

项目介绍

时钟FA卡片应用主要介绍了如何创建、更新和删除卡片,对象关系映射型数据库的使用以及如何启动计时器服务,整个工程的代码结构如下:
 codelabs-ClockFACardDome学习体验分享-鸿蒙开发者社区

· 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

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
codelabs-ClockFACardDome学习体验分享.docx 148.6K 7次下载
收藏
回复
举报
回复
    相关推荐