HarmonyOS服務卡片-運動飲食健康卡片
引言
隨著現(xiàn)代人生活節(jié)奏的加快,生活水平的不斷提高,健康成為了眼下人們越來越關心的話題,尤其對于上班族,熬夜加班,晚睡早起,飲食不規(guī)律,缺乏鍛煉,使得身體出現(xiàn)一定的亞健康問題。隨著科技的發(fā)展,只有通過科學的方法了解身體的指標,給出合理的飲食,睡眠,運動等等建議,才能針對性的改善自身的健康問題,讓我們每一個人回歸健康,快樂的生活。
開發(fā)背景
人們對健康的要求越來越高,從單純的健康飲食到健康運動,再到兩者的結(jié)合。但是,飲食和運動之間的平衡一般人很難掌握,而我們這款APP將飲食、運動、以及自身身體狀況(如體脂、體重、內(nèi)脂等)有機結(jié)合起來。以體魄為根本,運動為支撐點,飲食為輔助,為每個人量身打造健康體魄,為實現(xiàn)健康中國努力。
需求分析
目前年輕人工作壓力大,飲食基本靠外賣,鍛煉就去健身房,無法將飲食和健身相結(jié)合,本APP旨在為每一位用戶打造個性化的運動飲食計劃。其功能主要分為兩類:運動(包括如何運動、需要多大運動量)與飲食(早中晚餐吃什么,怎么制作等)。
主要功能介紹
健康+服務卡片主要包含三部分功能:
1、服務卡片(2*2)展示體脂儀主要測量數(shù)據(jù)(體重、身體年齡、BMI值);

點擊該卡片,可以進入APP主頁,查看更多指標數(shù)據(jù)。

2、服務卡片(4*4)展示體脂儀其他更為精準化的測量數(shù)據(jù),并根據(jù)這些數(shù)據(jù)給出科學的飲食推薦;

點擊“早餐推薦”或午餐推薦,可以跳轉(zhuǎn)至推薦的飲食頁面。

3、服務卡片(2*4)根據(jù)體脂儀測量的各項數(shù)據(jù),給出合理化的,精準化的訓練方案。

點擊卡片右側(cè)推薦的健身項目,進入對應的訓練項目詳解。

關鍵技術細節(jié)實現(xiàn)
一、創(chuàng)建“健康+”app工程
1、安裝和配置DevEco Studio 2.1 Release
2、創(chuàng)建項目
1)打開DevEco Studio,F(xiàn)ile→New→New Project;

2)Choose your ability template,選擇Empty Ability(Java),然后Next;

3)Configure your project,下列紅色框中都是要填寫或者選擇的,其中Project Name,Package Name,Save Location可以自定義;Project Type注意選擇Application;Compatible API Version注意選擇最新SDK版本:SDK API Version 5;Device Type選擇你使用的設備,我這里選擇Phone。最后點擊Finish,項目創(chuàng)建完成。

二、健康與飲食app服務卡片實現(xiàn)
第一步:卡片生成
1)在項目包名上右擊,選擇New→Service Widget

2)Choose a template for your service widget,選擇Base的服務卡片,然后在Template下任意選擇一種模版,點擊Next

3)Configure Your Service Widget,其中Service Widget Name, Description可以自定義;Select Ability/New Ability使用默認的MainAbility; Type可以選擇java或者js開發(fā);SupportDimensions選擇卡片樣式(2*2、2*4以及4*4);點擊Finish,完成服務卡片創(chuàng)建。

第二步:卡片布局的修改:
2*2服務卡片的布局

2*4服務卡片的布局

4*4服務卡片的布局

第三步:卡片信息創(chuàng)建、更新、刪除


第四步、卡片在桌面的創(chuàng)建方式
長按app圖標,彈出如下彈框

選擇服務卡片,出現(xiàn)如下選擇畫面



選擇添加到桌面,則桌面會出現(xiàn)對應的服務卡片



第五步:卡片的點擊跳轉(zhuǎn)實現(xiàn)


重難點解析
點擊卡片中某個控件,跳轉(zhuǎn)至指定頁面
1)在MainAbility的創(chuàng)建卡片onCreateForm(Intent intent)方法中創(chuàng)建ComponentProvider對象
- ComponentProvider componentProvider=new ComponentProvider();
2)然后調(diào)用componentProvider.setIntentAgent(int viewId,IntentAgent intent)
其中第一個參數(shù)為控件ID,第二個參數(shù)為跳轉(zhuǎn)指定頁面?zhèn)魅氲膇ntent;
3)componentProvider.setIntentAgent(ResourceTable.Id_img_base2_4, startAbilityIntentAgent(ABILITY_NAME));
4)最后providerFormInfo.mergeActions(componentProvider);
5)startAbilityIntentAgent(ABILITY_NAME)參數(shù)為初入的ability名,字符串類型。
- private IntentAgent startAbilityIntentAgent(String abilityName) {
- Intent intent = new Intent();
- Operation operation = new Intent.OperationBuilder()
- .withDeviceId("")
- .withBundleName("com.zel.health")
- .withAbilityName(abilityName)
- .build();
- intent.setOperation(operation);
- List intentList = new ArrayList<>();
- intentList.add(intent);
- List flags = new ArrayList<>();
- flags.add(Flags.UPDATE_PRESENT_FLAG);
- IntentAgentInfo paramsInfo = new IntentAgentInfo(200, IntentAgentConstant.OperationType.START_ABILITY, flags, intentList, null);
- IntentAgent intentAgent = IntentAgentHelper.getIntentAgent(this, paramsInfo);
- return intentAgent;
- }