【精華+1】HarmonyOS官方模板優(yōu)秀案例-第3期:教育行業(yè) ·?教育備考

0 評(píng)論 1466 瀏覽 1 收藏 40 分鐘

?? 鴻蒙生態(tài)為開發(fā)者提供海量的HarmonyOS模板/組件,助力開發(fā)效率原地起飛 ??

★ 一鍵直達(dá)生態(tài)市場(chǎng)組件&模板市場(chǎng)?, 快速應(yīng)用DevEco Studio插件市場(chǎng)集成組件&模板?★

前兩期案例介紹了便捷生活、新聞行業(yè),大家是不是意猶未盡?

第三期-教育行業(yè)的案例加急發(fā)布啦!

?? 覆蓋20+行業(yè),本帖以匯總形式持續(xù)更新中,點(diǎn)擊收藏!一鍵三連!??闯P?!

 

【第3期】教育行業(yè) ·?教育備考

概述

1.行業(yè)洞察

行業(yè)訴求:

    • 精準(zhǔn)分發(fā):面對(duì)不同的受眾教育類應(yīng)用有不同的業(yè)務(wù)場(chǎng)景,產(chǎn)出適配內(nèi)容、精準(zhǔn)題庫(kù)等,并以高效且契合場(chǎng)景的方式進(jìn)行分發(fā),最終實(shí)現(xiàn)優(yōu)質(zhì)教育資源的有效傳遞。
    • 高效流暢、操作敏捷是教育類應(yīng)用不同場(chǎng)景重要訴求,在線學(xué)習(xí)、考試等場(chǎng)景出現(xiàn)卡頓會(huì)嚴(yán)重影響學(xué)習(xí)、考試的。
    • 需具備智能刷題與精準(zhǔn)輔導(dǎo)能力:基于大數(shù)據(jù)和算法,依據(jù)答題情況判斷用戶知識(shí)掌握狀況,動(dòng)態(tài)調(diào)整出題難度,推送契合的學(xué)習(xí)內(nèi)容。
    • 多端協(xié)同能力:實(shí)現(xiàn)手機(jī)、平板、PC 端數(shù)據(jù)實(shí)時(shí)互通,提供離線功能,便于用戶利用碎片化時(shí)間用于刷題或知識(shí)點(diǎn)復(fù)習(xí),并可在線后同步學(xué)習(xí)進(jìn)度。

行業(yè)常用三方SDK

SDK鏈接:騰訊瀏覽服務(wù)SDK、高德定位SDK、百度地圖SDK 極光Push SDK、火山引擎SDK、同盾SDK、友盟SDK、微信支付SDK、支付寶SDK、聽云SDK、福昕?PDF SDK、網(wǎng)易云信?IM SDK保利威視頻直播webSDK、支付寶分享SDK

說(shuō)明:“以上三方庫(kù)及鏈接僅為示例,三方庫(kù)由三方開發(fā)者獨(dú)立提供,以其官方內(nèi)容為準(zhǔn)”

 

2.行業(yè)案例概覽(下載模板

基于以上行業(yè)分析,本期將介紹鴻蒙生態(tài)市場(chǎng)教育行業(yè)模板——教育備考應(yīng)用模板,為行業(yè)提供常用功能的開發(fā)案例,模板主要分練習(xí)、課程和我的三大模塊。

  • Stage開發(fā)模型 + 聲明式UI開發(fā)范式。
  • 分層架構(gòu)設(shè)計(jì) + 組件化拆分,支持開發(fā)者在開發(fā)時(shí)既可以選擇完整使用模板,也可以根據(jù)需求單獨(dú)選用其中的業(yè)務(wù)組件。
  • 本模板已集成華為賬號(hào)服務(wù),只需做少量配置和定制即可快速實(shí)現(xiàn)華為賬號(hào)的登錄等功能。

本模板主要頁(yè)面及核心功能如下所示

?題庫(kù)模板

?|-- 開屏頁(yè)

?|-- 練習(xí)

?| ???|-- banner

?| ???|-- 搜索

?| ???└-- 答題練習(xí)

?|-- 課程

?| ???|-- 分類列表

?| ???|-- 精選課程

?| ???| ???|-- 課程詳情

?| ???| ???└-- 支付購(gòu)買

?| ???└-- 已購(gòu)我的課程

?| ????????|-- 練習(xí)模式

?| ????????|-- 考試模式

?| ????????|-- 錯(cuò)題記錄

?| ????????└-- 收藏記錄

?| ????????└-- 筆記記錄

?└-- 我的

??????|-- 用戶信息

??????| ???|-- 登錄

??????| ???|-- 用戶信息

??????|-- 我的訂單

??????|-- 我的錯(cuò)題

??????|-- 我的收藏

??????|-- 練習(xí)記錄

??????|-- 瀏覽記錄

??????└-- 設(shè)置

???????????|-- 個(gè)人信息

???????????|-- 意見反饋

???????????|-- 反饋記錄

???????????|-- 隱私協(xié)議

???????????|-- 清除緩存

???????????└-- 退出登錄

 

二、應(yīng)用架構(gòu)設(shè)計(jì)

  1. 分層模塊化設(shè)計(jì)

產(chǎn)品定制層:專注于滿足不同設(shè)備或使用場(chǎng)景的個(gè)性化需求,作為應(yīng)用的入口,是用戶直接互動(dòng)的界面。

本實(shí)踐暫時(shí)只支持直板機(jī),為單HAP包形式,包含路由根節(jié)點(diǎn)、底部導(dǎo)航欄等。

基礎(chǔ)特性層:用于存放相對(duì)獨(dú)立的功能UI和業(yè)務(wù)邏輯實(shí)現(xiàn)。

本實(shí)踐的基礎(chǔ)特性層將應(yīng)用功能拆分成6個(gè)相對(duì)獨(dú)立的業(yè)務(wù)功能模塊。

每個(gè)功能模塊都具備高內(nèi)聚、低耦合、可定制的特點(diǎn),支持產(chǎn)品的靈活部署。

公共能力層:存放公共能力,包括公共UI組件、數(shù)據(jù)管理、外部交互和工具庫(kù)等共享功能。

本實(shí)踐的公共能力層分為公共基礎(chǔ)能力和行業(yè)組件,均打包為HAR包被基礎(chǔ)特性層的業(yè)務(wù)模塊引用。

公共基礎(chǔ)能力包含賬號(hào)管理、動(dòng)態(tài)布局等工具,公共類型定義,網(wǎng)絡(luò)庫(kù),以及彈窗、加載等公共組件。

行業(yè)組件將包含行業(yè)特點(diǎn)、可完全自閉環(huán)的能力抽出獨(dú)立的組件模塊,支持開發(fā)者在開發(fā)中單獨(dú)集成使用,詳見業(yè)務(wù)組件設(shè)計(jì)章節(jié)。

  1. 業(yè)務(wù)組件設(shè)計(jì)

為支持開發(fā)者單獨(dú)獲取特定場(chǎng)景的頁(yè)面和功能,本模板將功能完全自閉環(huán)的部分能力抽離出獨(dú)立的行業(yè)組件模塊,不依賴公共基礎(chǔ)能力包,開發(fā)者可以單獨(dú)集成,開箱即用,降低使用難度。

三、行業(yè)場(chǎng)景技術(shù)方案

  1. 一鍵搜題

場(chǎng)景說(shuō)明

用戶可在首頁(yè)-搜題進(jìn)入一鍵搜題頁(yè)面,可輸入、語(yǔ)音輸入,拍照識(shí)別,粘貼和清除功能。

技術(shù)方案

  • 語(yǔ)音輸入

根據(jù)語(yǔ)音識(shí)別可實(shí)現(xiàn)功能。

  • 拍照識(shí)別

根據(jù)拍照可實(shí)現(xiàn)拍照功能,

圖片獲取后參考recognizeText獲取具體結(jié)果。

代碼參考

部分核心代碼參見搜題組件實(shí)現(xiàn)章節(jié)。

  1. 多級(jí)分欄

場(chǎng)景說(shuō)明

用戶可通過(guò)首頁(yè)右上角的按鈕拉起多級(jí)選擇界面,可進(jìn)行多級(jí)別職稱的選擇。

技術(shù)方案

采用左右兩個(gè)List做為基礎(chǔ)組件來(lái)實(shí)現(xiàn)業(yè)務(wù),三級(jí)、多級(jí)目錄采用數(shù)據(jù)源刷新特性實(shí)現(xiàn)具體業(yè)務(wù)。

  1. 答題

場(chǎng)景說(shuō)明

用戶可通過(guò)首頁(yè)點(diǎn)擊每日一練可進(jìn)入答題練習(xí)頁(yè)面,可添加筆記、收藏、答題等相關(guān)業(yè)務(wù),答題這塊只做了單選業(yè)務(wù)。

技術(shù)方案

核心是狀態(tài)變量的使用@ObservedV2通過(guò)首選項(xiàng)記錄相關(guān)操作業(yè)務(wù)。

 

四、模板代碼

  1. 工程結(jié)構(gòu)下載模板

詳細(xì)代碼結(jié)構(gòu)如下所示:

Exam

??├─commons/commonLib/src/main

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????CommonHeader.ets?????????????????// 一級(jí)頁(yè)面標(biāo)題組件

??│ ?│ ?│ ?????TopBar.ets???????????????????????// 標(biāo)題菜單內(nèi)容組件

??│ ?│ ?├─utils

??│ ?│ ?│ ?????Logger.ets???????????????????????// 日志

??│ ?│ ?│ ?????PreferenceUtil.ets???????????????// 首選項(xiàng)

??│ ?│ ?├─viewModel

??│ ?│ ?│ ?????BrowsingHistoryModel.ets?????????// 記錄模塊數(shù)據(jù)模型

??│ ?│ ?│ ?????OrderInfo.ets????????????????????// 訂單數(shù)據(jù)模型

??│ ?│ ?│ ?????PracticeRecordModel.ets??????????// 練習(xí)數(shù)據(jù)模型

??│ ?└─resources

??├─commons/router_module/src/main

??│ ?├─ets

??│ ?│ ?├─routerModule

??│ ?│ ?│ ?│ ???RouterModule.ets????????????????// 路由

??│ ?│ ?│ ?│ ?├─constants

??│ ?│ ?│ ?│ ?│ ?│ RouterMap.ets????????????????// 路由Key

??│ ?└─resources??

??│─components/aggregated_payment/src/main???

??│ ?├─ets

??│ ?│ ?├─common

??│ ?│ ?│ ?????Constant.ets?????????????????????// 常量類

??│ ?│ ?├─components

??│ ?│ ?│ ?????AggregatedPaymentPicker.ets??????// 支付組件

??│ ?│ ?├─model

??│ ?│ ?│ ?????Index.ets????????????????????????// 數(shù)據(jù)類型

??│ ?│ ?│ ?????WXApiWrap.ets????????????????????// 微信支付數(shù)據(jù)類型

??│ ?│ ?└─viewmodel

??│ ?│ ????????AggregatedPaymentVM.ets??????????// 支付組件數(shù)據(jù)模型

??│ ?└─resources

??│─components/answer_questions/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????AnswerQuestionsPage.ets???????????// 答題組件

??│ ?│ ?│ ?????AddNotePage.ets???????????????????// 添加筆記組件

??│ ?│ ?│ ?????AnswerSheetPage.ets???????????????// 答題卡組件

??│ ?│ ?├─dialog

??│ ?│ ?│ ?????AddNoteDialog.ets?????????????????// 添加筆記彈框

??│ ?│ ?│ ?????AnswerSheetDialog.ets?????????????// 答題卡彈框

??│ ?│ ?└─viewModel

??│ ?│ ????????TopicItemModel.ets????????????????// 答題選項(xiàng)模型

??│ ?│ ????????TopicPageModel.ets????????????????// 答題模型

??│ ?└─resources

??│─components/feed_back/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????Feedback.ets??????????????????????// 意見反饋功能組件

??│ ?│ ?├─model

??│ ?│ ?│ ?????FeedbackRecordModel.ets???????????// 數(shù)據(jù)類型

??│ ?│ ?├─utils

??│ ?│ ?│ ?????FileSelect.ets????????????????????// 意見反饋功工具類

??│ ?└─resources

??│─components/select_category/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????MainPage.ets??????????????????????// 二級(jí)分類組件

??│ ?│ ?│ ?????ThirdcatePage.ets?????????????????// 三級(jí)分類組件

??│ ?│ ?├─model

??│ ?│ ?│ ?????SelectCateModel.ets???????????????// 數(shù)據(jù)類型 ????

??│ ?└─resources

??│─components/login_info/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????AgreementDialog.ets???????????????// 同意協(xié)議彈窗組件

??│ ?│ ?│ ?????QuickLogin.ets????????????????????// 一鍵登錄組件

??│ ?│ ?├─model

??│ ?│ ?│ ?????ErrorCode.ets?????????????????????// 錯(cuò)誤碼類型

??│ ?│ ?│ ?????UserInfo.ets??????????????????????// 用戶類型

??│ ?│ ?└─utils

??│ ?│ ????????AccountUtil.ets???????????????????// 賬戶工具類

??│ ?└─resources

??│─components/search/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????SearchPage.ets????????????????????// 搜索組件

??│ ?└─resources

??│─components/search_question/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????SearchQuestionPage.ets????????????// 一鍵搜題組件

??│ ?└─resources

??│─components/base_select/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????MainPage.ets??????????????????????// 基礎(chǔ)通用組件

??│ ?│ ?├─model

??│ ?│ ?│ ?????SelectModel.ets???????????????????// 選項(xiàng)數(shù)據(jù)模型

??│ ?└─resources??

??│─features/homePage/src/main???

??│ ?├─ets

??│ ?│ ?├─components?????????????????????????????// 封裝組件

??│ ?│ ?│ ?????CourseBookComponent.ets???????????// 資料卡片組件 ???????

??│ ?│ ?│ ?????CourseComponent.ets???????????????// 課程卡片 ?????

??│ ?│ ?├─model

??│ ?│ ?│ ????ChapterPractice.ets????????????????// 分類頁(yè)面數(shù)據(jù)模型

??│ ?│ ?│ ????CommonTopic.ets????????????????????// 分類數(shù)據(jù)模型

??│ ?│ ?│ ????Course.ets?????????????????????????// 課程數(shù)據(jù)模型 ?

??│ ?│ ?│ ????CourseArray.ets????????????????????// 課程數(shù)組模型

??│ ?│ ?│ ????CourseBook.ets?????????????????????// 資料模型

??│ ?│ ?│ ????CourseQuestions.ets????????????????// 科目數(shù)據(jù)模型

??│ ?│ ?│ ????PracticeMode.ets???????????????????// 業(yè)務(wù)類型數(shù)據(jù)模型 ?

??│ ?│ ?│ ????TopicItemModel.ets?????????????????// 答題類型數(shù)據(jù)模型 ?

??│ ?│ ?│ ????TopicModel.ets?????????????????????// 分類數(shù)據(jù)源 ?

??│ ?│ ?├─pages

??│ ?│ ?│ ?????ChapterPractice.ets???????????????// 科目頁(yè)面

??│ ?│ ?│ ?????FeaturedCourses.ets???????????????// 精選課程頁(yè)面

??│ ?│ ?│ ?????MainPage.ets??????????????????????// 練習(xí)首頁(yè)面

??│ ?│ ?│ ?????MaterialDownload.ets??????????????// 資料頁(yè)面

??│ ?│ ?│ ?????SearchIndexPage.ets???????????????// 搜索頁(yè)面

??│ ?│ ?│ ?????SearchInputPage.ets???????????????// 搜索輸入框頁(yè)面 ?

??│ ?│ ?│ ?????SecondListPage.ets????????????????// 2級(jí)分類

??│ ?│ ?│ ?????ThirdListPage.ets?????????????????// 3級(jí)分類

??│ ?│ ?│ ?????TopicHomePage.ets?????????????????// 1級(jí)分類 ?

??│ ?│

??│ ?└─resources

??│─features/topicPage/src/main???

??│ ?├─ets

??│ ?│ ?├─views

??│ ?│ ?│ ?????AnswerQuestionsPage.ets???????????// 答題模式一頁(yè)面

??│ ?│ ?│ ?????AnswerQuestionsTwoPage.ets????????// 答題模式二頁(yè)面

??│ ?│ ?│ ?????CourseHomePage.ets????????????????// 課程頁(yè)面

??│ ?│ ?│ ?????CourseIntroductionPage.ets????????// 課程詳情頁(yè)面

??│ ?│ ?│ ?????ExamResultPage.ets????????????????// 答題結(jié)果頁(yè)面

??│ ?│ ?│ ?????GoodCourseDetailPage.ets??????????// 精選課程頁(yè)面

??│ ?│ ?│ ?????MockTestPage.ets??????????????????// 科目練習(xí)頁(yè)面

??│ ?│ ?│ ?????MyCollectionPage.ets??????????????// 收藏頁(yè)面

??│ ?│ ?│ ?????MyNotesPage.ets???????????????????// 筆記頁(yè)面

??│ ?│ ?│ ?????MyWrongPage.ets???????????????????// 錯(cuò)題頁(yè)面

??│ ?│ ?│ ?????TestReportPage.ets????????????????// 測(cè)試報(bào)告頁(yè)面

??│ ?│ ?│ ?????ViewNotePage.ets??????????????????// 筆記組件

??│ ?│ ?└─viewModel

??│ ?│ ?│ ?????CourseHomeModel.ets???????????????// 課程頁(yè)面數(shù)據(jù)模型

??│ ?│ ?│ ?????PracticeMode.ets??????????????????// 科目數(shù)據(jù)模型

??│ ?│ ?│ ?????SecondListModel.ets???????????????// 選項(xiàng)類型數(shù)據(jù)模型

??│─features/minePage/src/main???

??│ ?├─ets

??│ ?│ ?├─components

??│ ?│ ?│ ?????Header.ets????????????????????????// Header組件

??│ ?│ ?├─viewModel??????????????????????????????// 數(shù)據(jù)類型

??│ ?│ ?│ ?????MessageModel.ets?????????????

??│ ?│ ?│ ?????setUpModel.ets????????????????????// 設(shè)置相關(guān)模型數(shù)據(jù)模型

??│ ?│ ?│ ?????MineModel.ets?????????????????????// 用戶資料信息數(shù)據(jù)模型

??│ ?│ ?├─views

??│ ?│ ?│ ?????AboutPage.ets?????????????????????// 關(guān)于頁(yè)面

??│ ?│ ?│ ?????AuthenticationPage.ets????????????// 用戶認(rèn)證協(xié)議頁(yè)面

??│ ?│ ?│ ?????BrowsingHistoryPage.ets???????????// 瀏覽頁(yè)面

??│ ?│ ?│ ?????CollectionPage.ets????????????????// 課程收藏頁(yè)面

??│ ?│ ?│ ?????CoursePage.ets????????????????????// 課程精選頁(yè)面

??│ ?│ ?│ ?????EditPersonalCenterPage.ets????????// 個(gè)人信息詳情頁(yè)面

??│ ?│ ?│ ?????FeedbackPage.ets??????????????????// 意見反饋?lái)?yè)面

??│ ?│ ?│ ?????FeedbackRecordPage.ets????????????// 反饋記錄頁(yè)面

??│ ?│ ?│ ?????MessageCenterPage.ets?????????????// 消息頁(yè)面

??│ ?│ ?│ ?????MinePage.ets??????????????????????// 我的頁(yè)面

??│ ?│ ?│ ?????MyOrderPage.ets???????????????????// 訂單首頁(yè)頁(yè)面

??│ ?│ ?│ ?????OneDayPracticeRecordsPage.ets?????// 單個(gè)練習(xí)記錄頁(yè)面

??│ ?│ ?│ ?????OrderDetailPage.ets???????????????// 訂單詳情頁(yè)面

??│ ?│ ?│ ?????OrderListPage.ets?????????????????// 訂單頁(yè)面

??│ ?│ ?│ ?????PracticeDetailsPage.ets???????????// 反饋?lái)?yè)面

??│ ?│ ?│ ?????PracticeRecordsPage.ets???????????// 練習(xí)記錄頁(yè)面

??│ ?│ ?│ ?????PrivacyAgreementPage.ets??????????// 同意

??│ ?│ ?│ ?????PrivacyPage.ets???????????????????// 協(xié)議

??│ ?│ ?│ ?????PrivacyStatementPage.ets??????????// 隱私頁(yè)面

??│ ?│ ?│ ?????SetupPage.ets?????????????????????// 設(shè)置頁(yè)面

??│ ?│ ?│ ?????TermsOfServicePage.ets????????????// 用戶服務(wù)頁(yè)面

??└─products/entry/src/main???

?????├─ets

?????│ ?├─entryability

?????│ ?│ ?????EntryAbility.ets??????????????????// 應(yīng)用程序入口

?????│ ?├─entrybackupability

?????│ ?│ ?????EntryBackupAbility.ets????????????// Backup配置入口 ????

?????│ ?├─pages

?????│ ?│ ?????Index.ets?????????????????????????// 入口頁(yè)面

?????│ ?│ ?????LoginPage.ets?????????????????????// login頁(yè)面

?????│ ?├─model

?????│ ?│ ?????TabListItem.ets???????????????????// 數(shù)據(jù)聲明

?????│ ?├─viewmodels

?????│ ?│ ?????MainVM.ets????????????????????????// 頁(yè)面數(shù)據(jù)模型

?????│ ?├─common?????????????????????????????????// 常量及Tab數(shù)據(jù)源

?????│ ????????TabConstants.ets

?????└─resources


 

  1. 關(guān)鍵代碼解讀

本篇代碼非應(yīng)用的全量代碼,只包括應(yīng)用的部分能力的關(guān)鍵代碼。

若需獲取全量代碼,請(qǐng)查看模板集成章節(jié)。

一鍵搜題

// 語(yǔ)音識(shí)別

// 請(qǐng)求權(quán)限后創(chuàng)建服務(wù)并監(jiān)聽

this.atManager.requestPermissionsFromUser(this.context, ['ohos.permission.MICROPHONE'])

????????????.then(async (data) => {

??????????????if (data.authResults[0] === 0) {

????????????????await this.createSREngine()

????????????????this.startListener()

??????????????}

????????????})

????????????.catch(() => {

??????????????//在此處進(jìn)行異常處理

????????????});

?

async createSREngine() {

????const extraParams: Record<string, Object> = {

??????'locate': 'CN',

??????'recognizerMode': 'short'

????}

????const initParamsInfo: speechRecognizer.CreateEngineParams = {

??????language: 'zh-CN',

??????online: 1,

??????extraParams

????}

????try {

??????this.asrEngine = await speechRecognizer.createEngine(initParamsInfo)

??????this.setListener()

????} catch (e) {

??????//在此處進(jìn)行異常處理

????}

??}

?

?startListener() {

????const audioParam: speechRecognizer.AudioInfo = {

??????audioType: 'pcm',

??????sampleRate: 16000,

??????soundChannel: 1,

??????sampleBit: 16

????};

????const extraParam: Record<string, Object> = { 'maxAudioDuration': 40000, 'recognitionMode': 0 };

????this.sessionId = new Date().getTime().toString()

????const recognizerParams: speechRecognizer.StartParams = {

??????sessionId: this.sessionId,

??????audioInfo: audioParam,

??????extraParams: extraParam

????};

????this.asrEngine?.startListening(recognizerParams)

??}

?

??setListener() {

????let that = this

????// 創(chuàng)建回調(diào)對(duì)象

????let setListener: speechRecognizer.RecognitionListener = {

??????// 開始識(shí)別成功回調(diào)

??????onStart() {

??????},

??????// 事件回調(diào)

??????onEvent() {

??????},

??????// 識(shí)別結(jié)果回調(diào),包括中間結(jié)果和最終結(jié)果

??????onResult(_sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {

????????that.textInput = that.textInputPre + result.result

??????},

??????// 識(shí)別完成回調(diào)

??????onComplete() {

????????that.textInputPre = that.textInput

??????},

??????// 錯(cuò)誤回調(diào),錯(cuò)誤碼通過(guò)本方法返回

??????// 返回錯(cuò)誤碼1002200002,開始識(shí)別失敗,重復(fù)啟動(dòng)startListening方法時(shí)觸發(fā)

??????// 更多錯(cuò)誤碼請(qǐng)參考錯(cuò)誤碼參考

??????onError() {

??????},

????}

????// 設(shè)置回調(diào)

????this.asrEngine?.setListener(setListener);

??};

?

// 拍照識(shí)別

async startCameraPicker() {

????let pickerProfile: picker.PickerProfile = {

??????cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK,

????};

????let result: picker.PickerResult =

??????await picker.pick(getContext(), [picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO],

????????pickerProfile);

????let uri = result.resultUri;

????let imageSource: image.ImageSource;

????let chooseImage: PixelMap;

????setTimeout(async () => {

??????let fileSource = await fileIo.open(uri, fileIo.OpenMode.READ_ONLY);

??????imageSource = image.createImageSource(fileSource.fd);

??????chooseImage = await imageSource.createPixelMap();

??????if (!chooseImage) {

????????return;

??????}

??????// 獲取圖片后調(diào)用文本識(shí)別接口

??????let visionInfo: textRecognition.VisionInfo = {

????????pixelMap: chooseImage

??????};

??????let textConfiguration: textRecognition.TextRecognitionConfiguration = {

????????isDirectionDetectionSupported: true

??????};

??????await textRecognition.recognizeText(visionInfo, textConfiguration).then((textRecognitionResult) => {

????????if (textRecognitionResult.value !== '') {

??????????this.search(textRecognitionResult.value)

????????}

??????})

????}, 100)

??}

系統(tǒng)路由封裝及使用

?// 1、定義路由工具類

import { RouterMap } from './constants/RouterMap';

?

export default interface NavRouterInfo {

??url: string; // 跳轉(zhuǎn)路由名

??mode?: NavDestinationMode; // NavDestination類型

??param?: Object; // 傳遞參數(shù)

??onPop?: Callback<PopInfo>; // 回調(diào)事件

}

?

class RouterModule {

??public static stack: NavPathStack = new NavPathStack();

??static builderMap: Map<string, WrappedBuilder<[object]>> = new Map<string, WrappedBuilder<[object]>>();

?

??// 頁(yè)面跳轉(zhuǎn)(指定頁(yè)面)

??public static push(info: NavRouterInfo, animated?: boolean) {

????try {

??????RouterModule.stack.pushPathByName(info.url, info.param, info.onPop, animated);

????} catch (err) {

????}

??}

?

??// 頁(yè)面替換(指定頁(yè)面)

??public static replace(info: NavRouterInfo) {

????try {

??????RouterModule.stack.replacePathByName(info.url, info.param);

????} catch (err) {

????}

??}

?

??// 頁(yè)面回退(上個(gè)頁(yè)面)

??public static pop<T = boolean>(result?: T, animated?: boolean) {

????try {

??????RouterModule.stack.pop(result, animated);

????} catch (err) {

????}

??}

?

??// 頁(yè)面回退(攜帶參數(shù))

??public static popWithRes(res: ESObject, animated?: boolean) {

????try {

??????RouterModule.stack.pop(res, animated);

????} catch (err) {

????}

??}

?

??// 頁(yè)面回退(至對(duì)應(yīng)頁(yè)面名)

??public static popToName(name: string, animated?: boolean) {

????try {

??????RouterModule.stack.popToName(name, animated);

????} catch (err) {

????}

??}

?

??// 頁(yè)面棧清空(回Navigation)

??public static clear(animated?: boolean) {

????try {

??????RouterModule.stack.clear(animated);

????} catch (err) {

????}

??}

?

??// 獲取頁(yè)面棧大小

??public static size(): number {

????return RouterModule.stack.size();

??}

?

??// 獲取參數(shù)(指定頁(yè)面)

??public static getNavParam<T = Object>(info: NavRouterInfo): T | undefined {

????try {

??????const paramsArr = RouterModule.stack.getParamByName(info.url) as T[] | undefined[];

??????return paramsArr.pop();

????} catch (err) {

????}

????return undefined;

??}

?

??// 獲取頁(yè)面名(頁(yè)面棧前一個(gè))

??public static getSourcePage(): string | undefined {

????const pathNames = RouterModule.stack.getAllPathName();

????pathNames.pop();

????return pathNames.pop();

??}

}

?

export { RouterModule, RouterMap };

?

// 2、定義RouterMap 注冊(cè)路由表時(shí)用 

export enum RouterMap {

??// 主頁(yè)

??MAIN_PAGE = 'MainPage',

}

// 3、注冊(cè)路由表

export class RouterTable {

??static builderMap: Map<string, WrappedBuilder<[object]>> = new Map<string, WrappedBuilder<[object]>>();

?

??// 初始化路由表

??public static routerInit() {

????RouterTable.builderMap.set(RouterMap.MAIN_PAGE, wrapBuilder(MainPageBuilder));

??}

?

??// 通過(guò)名稱獲取builder

??public static getBuilder(builderName: string): WrappedBuilder<[]> {

????let builder = RouterTable.builderMap.get(builderName);

????return builder as WrappedBuilder<[]>;

??}

}

?

4、使用前需先init注冊(cè)

?// 初始化路由表

????RouterTable.routerInit()

?

// 創(chuàng)建導(dǎo)航Navigation

@Builder

??pageMap(name: string) {

????NavDestination() {

??????RouterTable.getBuilder(name).builder()

????}

????.mode(NavDestinationMode.STANDARD)

????.hideTitleBar(true)

????.onBackPressed(() => {

??????return this.backPress(name)

????})

??}

?

??build() {

????Column() {

??????Navigation(RouterModule.stack) {

??????}

??????.hideNavBar(true)

??????.hideToolBar(true)

??????.hideTitleBar(true)

??????.hideBackButton(true)

??????.mode(NavigationMode.Stack)

??????.navDestination(this.pageMap)

????}

??}

 

  1. 模板集成

本模板提供了兩種代碼集成方式,供開發(fā)者自由選用。

整體集成下載模板

開發(fā)者可以選擇直接基于模板工程開發(fā)自己的應(yīng)用工程。

模板代碼獲?。?/strong>

打開模板工程,根據(jù)README說(shuō)明中的快速入門章節(jié),將自己的應(yīng)用信息配置在模板工程內(nèi),即可運(yùn)行并查看模板效果。

根據(jù)自己的業(yè)務(wù)內(nèi)容修改模板,進(jìn)行定制化開發(fā)。

按需集成

若開發(fā)者已搭建好自己的應(yīng)用工程,但暫未實(shí)現(xiàn)其中的部分場(chǎng)景能力,可以選擇取用其中的業(yè)務(wù)組件,集成在自己的工程中。

組件代碼獲?。?/strong>

下載組件源碼,根據(jù)README中的說(shuō)明,將組件包配置在自己的工程中。

根據(jù)API參考和示例代碼,將組件集成在自己的對(duì)應(yīng)場(chǎng)景中。

 

以上是第三期“教育行業(yè)-教育備考”行業(yè)優(yōu)秀案例的內(nèi)容,更多行業(yè)敬請(qǐng)期待~

歡迎下載使用行業(yè)模板“點(diǎn)擊下載”,若您有體驗(yàn)和開發(fā)問(wèn)題,或者迫不及待想了解XX行業(yè)的優(yōu)秀案例,歡迎在評(píng)論區(qū)留言,小編會(huì)快馬加鞭為您解答~

同時(shí)誠(chéng)邀您添加下方二維碼加入“組件模板活動(dòng)社群”,精彩上新&活動(dòng)不錯(cuò)過(guò)!

?? 系列持續(xù)更新,歡迎收藏本帖!

第1期 HarmonyOS官方模板優(yōu)秀案例 | 便捷生活行業(yè) · 購(gòu)物中心>>點(diǎn)擊查看

第2期 HarmonyOS官方模板優(yōu)秀案例 | 新聞行業(yè) · 綜合新聞>>點(diǎn)擊查看

第3期 HarmonyOS官方模板優(yōu)秀案例 | 教育行業(yè) · 教育備考>>點(diǎn)擊查看

第4期 HarmonyOS官方模板優(yōu)秀案例 | 餐飲行業(yè) · 美食菜譜>>馬上發(fā)布

第5期 HarmonyOS官方模板優(yōu)秀案例 | 工具行業(yè) · 日歷應(yīng)用>>馬上發(fā)布

 

?? HarmonyOS組件模板相關(guān)推薦

  • 【活動(dòng)ing】HarmonyOS組件/模板集成創(chuàng)新活動(dòng),報(bào)名時(shí)間截止2025年8月30日,點(diǎn)擊查看
  • 鴻蒙應(yīng)用開發(fā)者激勵(lì)計(jì)劃2025,點(diǎn)擊查看
更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!