codelabs-ClockFACardDome学习体验分享 原创
一、总述
项目名称: 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