一、關于項目
1.1 項目特色
1.嚴格遵循設計規范,提供 6 種主題配色,自動深淺色適配;
2.20+ 原生自定義組件,純 ArkTS 打造,未使用三方庫;
3.一次開發,多端部署,為大中小不同類型的屏幕單獨適配,手機平板折疊屏都有沉浸體驗;
4.分布式技術,自創 rdb 轉 kv 數據傳輸,組網內自發現,數據無感同步;
5.提供不同功能不同大小的六款萬能卡片,操作一步到位;
6.本地文件存儲備份。
1.2 概述
隨著日常生活中任務和日程的增加,人們經常會遇到遺忘一些重要事情的問題?,F在,我們有許多待辦清單類 APP,但它們要么功能過于復雜,要么功能過于簡單,無法滿足用戶需求。此外,數據同步和安全性也是一個常見的問題。在這樣的情況下,我們決定開發一款既簡單易用,又具有豐富功能的待辦清單類 APP,能夠幫助用戶更好地管理自己的任務和日程安排,提高工作和生活的效率。
在選擇開發平臺時,我們發現 oh 的分布式能力可以解決數據的同步和安全性問題,并且 oh 平臺上還沒有功能完善的待辦清單類 APP,這使得我們能夠填補市場空缺。
綜上,我們決定開發一個原生的,具有多端適配和同步備份功能的待辦清單類應用,以達到解決市場空缺,解決用戶需求的目的。
我們的 APP 名為“便單”,是用于 oh 標準設備的待辦事項管理的工具。它采用 ArkTS 語言編寫,基于 ArkUI 的強大能力和原生圖標的精確使用,我們創建了簡潔明了的設計風格,讓用戶一目了然地看到自己的任務清單。同時,我們提供了多種主題色供用戶自由選擇,增加了趣味性和個性化,還適配了系統級的深淺配色,實現了系統級的沉浸式體驗。
“便單”不僅可以讓用戶添加、編輯、刪除、篩選、歸檔自己的任務,還可以讓用戶設置任務的優先級、截止日期、重復規則、提醒方式等多種屬性,讓用戶更靈活地管理自己的任務。我們還提供了日歷頁面、四象限頁面、多種萬能卡片等方式拓展用戶的使用場景,優化用戶的使用體驗。
最重要的是,“便單”支持多設備,可以在不同的設備間交換和同步用戶的數據,讓用戶可以隨時隨地地查看和更新自己的任務清單。這些功能全都是在本地進行的,不必擔心數據泄露。
1.3 程序約束限制
1.本示例僅支持標準系統上運行。
2.本示例為 Stage 模型,支持 API version 9 版本 SDK。
3.本示例需要使用 DevEco Studio 3.1 Release 版本進行編譯運行。
二、應用設計
2.1 需求分析
基于應用的使用場景和平臺,我們認為一個完整的待辦清單類 APP 應該具有以下功能:
1.創建事項
用戶創建事項時,應該可以自定義多種屬性,包括標題,備注,有效時間,分類文件夾,是否收藏,是否重要等。包括可以創建循環事件,可以自定義循環周期和循環具體規則。
2.編輯事項
創建完事件后,應該可以隨時修改事件的所有內容,包括完成標記應該可以撤銷,過期事項應該可以延期。
3.刪除事項
創建的事件應該可以隨時刪除,包括多端同時刪除。
4.事項整理
事項應該可以提供分類,包括文件夾分類,事件分類(日歷視圖),是否重要是否緊急的分類(四象限視圖)等。
5.數據導出導入
所有的數據都應該可以導出到本地,又可以從本地備份中恢復,方便用戶重置應用或者更換設備時可以實現數據不會丟。
6.多端同步
需要利用好分布式的特點,做出差異化,實現局域網內設備的數據同步,包括自動和手動兩種方式。
7.定點提醒
事項應該還具備定時提醒的功能,在用戶設定的時間點通過系統創建提醒,保證用戶在某個具體時間收到提醒。
8.萬能卡片
可以使用華為的服務,基于系統特性提供萬能卡片服務功能,實現一級界面直接操作 APP。
并且應該嚴格遵守設計規范,制作美觀簡潔界面,同時支持手機,折疊屏,平板三端,支持淺色模式深色模式。
美術設計方面盡量使用華為原生圖標,保證軟件與系統的一致性,同時應該盡量使用 SVG 格式的圖片,減輕應用大小,矢量圖也更方便資源復用,保證多端顯示的美觀和統一。
2.2 項目結構
├─entry ├─src ├─main ├─ets | ├─control //控制器 | ├─dao //數據訪問對象 | ├─entryability | | └EntryAbility.ets //卡片生命周期管理文件 | ├─entryformability | | └EntryFormAbility.ets //應用生命周期管理文件 | ├─formview //卡片視圖 | ├─model //結構模型 | └pages //視圖 | ├─element //其他自定義組件 | └view //界面組件 ├─resources //資源文件 | ├─base | ├─dark //深色模式資源 | ├─light //淺色模式資源 | └rawfile └module.json5 //配置文件
?
2.3 部分特色功能概要設計
2.3.1 數據導出
要實現數據導出導入,首先應當申請系統讀寫權限,數據導出只需要將數據庫內容導出然后寫入設定的文件夾中的文件即可。
2.3.2 數據導入
導入文件類似于導出和添加的結合,申請到文件讀寫權限后,將需要導入的文件讀入程序,然后覆寫掉數據庫即可,注意提醒應當即時更新成當前版本。
2.3.3 數據同步
數據同步需要申請分布式數據的訪問權限,首先監聽組網中的其他設備,然后監聽其他設備是否有發布新版本的數據,監聽到新版本數據即可執行導入操作,覆寫掉本地數據,實現數據的同步。
2.3 數據庫設計
數據庫結構 ER 圖如下:
其中 Task 是創建事項的實體,ShowTask 為展示事項的實體,因為在創建事項的時候可能會產生循環事項,一次性創建多個事項,這些事項的很多信息都是相同的。如果直接多次重復創建,會造成很多數據冗余,所以我們將具體信息都存在 Task 實體中,將單次事項的信息存放在 ShowTask 中。
而文件夾實體顧名思義,是歸類事項的實體,由于一個循環事項應該也在同一個分類,所以從屬文件夾應該是 Task 的一個屬性,為了方便編輯文件夾和避免冗余,他們應該是一個一對多的從屬關系。
三、部分應用特色功能實現
3.1 定時通知
向系統提交定時通知的申請,以實現在需要的時候即使應用不在前后臺也能正常提醒,
實現代碼如下,所選的在發布時間時在系統通知欄顯示標題信息和有效時間信息。
/** * 發布通知 * @param id * @param title 通知標題 * @param StartTimeDate 有效開始日期 * @param ValidStartTime 有效結束日期 * @param EndTimeDate 有效開始時間 * @param ValidEndTime 有效結束時間 * @param publishTime 發布時間 */ async function publishNotification(eventId: number, title: string, StartTimeDate: number[], ValidStartTime: number[], EndTimeDate: number[], ValidEndTime: number[], publishTime: number[]) { let validStartTime: number[] = StartTimeDate.concat(ValidStartTime) let validEndTime: number[] = EndTimeDate.concat(ValidEndTime) let DefaultTimeFormat: number = AppStorage.Get("DefaultTimeFormat") let validTime: string = getValidTimeInfo(validStartTime, validEndTime, [publishTime[0], publishTime[1], publishTime[2]], DefaultTimeFormat == 0) let timer = await getReminderRequest(eventId, title, validTime, publishTime) if (await getPermission_PUBLISH_AGENT_REMINDER()) { let reminderId = await reminderAgent.publishReminder(timer) setStorage(eventId, reminderId) } }
?
若是因為一些原因需要撤銷通知,我們可以通過 id 撤回該申請
async function cancelNotification(eventId: number) { let id = await getStorage(eventId) reminderAgent.cancelReminder(id).then(() => { console.log("[Reminder] cancelReminder promise: " + id); }); }
?
3.2 數據導出和導入
在底部頁簽中,點擊設置即可切換到設置界面。
“本地備份”點擊后可以打開對應界面,之后可以開啟自動備份,即在每次退出應用時候自動備份。或者可以在下方點擊立即備份以手動備份。同時可以點擊右側的刷新查看當前所有備份情況。
首先查詢媒體讀寫權限是否獲取,若是沒有則申請權限:
export async function getPermission_WRITE_MEDIA(): Promise { let array: Array = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA']; var context = featureAbility.getContext() context.requestPermissionsFromUser(array, 1); var authResults0 = await context.verifyPermission(array[0]) var authResults1 = await context.verifyPermission(array[1]) let ret: boolean = ((authResults0 == 0) && (authResults1 == 0)) if (!ret) { AppStorage.Set('BackUpSwitch', false) AppStorage.Set('AutoBackUpSwitch', false) } return ret }
?
導出備份的代碼實現如下:
export async function backupFile() { let value = await getPermission_WRITE_MEDIA() if (value) { let data: object = await getBackupObject() let str: string = JSON.stringify(data) console.log('backup value: ' + str); await writeFile(str) await deleteRedundancyFile() } }
?
為了實現只保留 10 個備份上限,防止備份過多導致占用空間爆炸,我們在每次備份前都檢查一次備份數量,大于 10 個就刪除到只保留 10 個為止:
async function deleteRedundancyFile() { let BackUpSwitch: boolean = AppStorage.Get('BackUpSwitch') if (!BackUpSwitch) return [] let media = mediaLibrary.getMediaLibrary(); console.log('filesFetchOptions = ' + JSON.stringify(filesFetchOptions)) let fetchFileResult = await media.getFileAssets(filesFetchOptions) console.log('fetchFileResult = ' + JSON.stringify(fetchFileResult) + ' ,number: ' + fetchFileResult.getCount().toString()) let count: number = 0 if (fetchFileResult.getCount() > 0) for (let i = await fetchFileResult.getFirstObject();!fetchFileResult.isAfterLast(); i = await fetchFileResult.getNextObject()) { if (!await i.isTrash()) { if (count < 10) { ++count } else { deleteFile(i) } } } }
?
導入備份的代碼實現如下:
export async function importFile(data: mediaLibrary.FileAsset): Promise[boolean, string]?> { let value = await getPermission_WRITE_MEDIA() if (value) { console.log('import: ' + JSON.stringify(data)); let obj: string = await readFile(data) let ret = JSON.parse(obj) console.log('import value: ' + JSON.stringify(ret)); return new Promise((resolve) => { backUpImpl.importData(ret, (flag: boolean, reason: string) => { resolve([flag, reason]) }) }) } }
?
3.3 多端同步
在設置頁點擊“多端同步”后打開界面,開啟后可以下載或者上傳數據并儲存在分布式數據庫中。并且在下方可以查看已經連接的設備情況。
首先檢查應用是否獲取訪問分布式數據的權限,若是沒有則申請權限:
export async function getPermission_DISTRIBUTED_DATASYNC(): Promise { let array: Array = ['ohos.permission.DISTRIBUTED_DATASYNC', 'ohos.permission.GET_DISTRIBUTED_DEVICE_INFO']; var context = featureAbility.getContext() context.requestPermissionsFromUser(array, 1); var authResults0 = await context.verifyPermission(array[0]) var authResults1 = await context.verifyPermission(array[1]) console.log("====>requestData====> " + authResults0 + ' ,' + authResults1); let ret: boolean = ((authResults0 == 0) && (authResults1 == 0)) if (!ret) { AppStorage.Set('TerminalsSyncSwitch', false) AppStorage.Set('AutoTerminalsSyncSwitch', false) } return ret }
?
由于三方應用并沒有權限查看組網內設備列表,但是可以監聽指定數據庫,我們通過一個算法實現了對組網內列表的監聽。
首先在本地生成唯一標識碼,和本機設備名稱,打包成一個類,準備上傳至分布式數據庫,再打開監聽,若該數據庫內容改變,則檢查其中是否有自己的信息,沒有的話加入自己的信息。在每次主動請求組網內設備時,我們先清空該數據庫,然后將本機信息寫入數據庫,即可實現對組網內設備列表的獲取。
這樣子可以保證每次打開手動獲取都會通知組網內設備將自己的信息寫入,從而收集完所有的信息,最后顯示在前端即可。
缺點是會有明顯的延遲,實機運行延遲可以保證在 5s 內。
完整代碼如下:
export async function getTerminalsList(): Promise { let TerminalsSyncSwitch = AppStorage.Get('TerminalsSyncSwitch') if (!TerminalsSyncSwitch) return [] const kvStore = await getKVStore() let thisDevice = getLocalTerminals() return new Promise((resolve) => { kvStore.get(Device_Key, function (err, DeviceList) { console.log("get success Device_Key: " + DeviceList); console.log("get error: " + err); let deviceList: object[] = (DeviceList == undefined) ? [] : JSON.parse(DeviceList) if (!deviceList.some(item => JSON.stringify(item) === JSON.stringify(thisDevice))) { deviceList.push(thisDevice) DeviceList = JSON.stringify(deviceList) console.log("[Sync] get new Device_Key: " + DeviceList); kvStore.put(Device_Key, DeviceList) } resolve(deviceList) }); }) }
?
向所有設備發送數據和接收數據,只需要將數據庫中的備份內容發送到分布式數據庫即可,若是需要自動同步,則打開數據庫監聽:
export async function ExportNewVersion(showPrompt: boolean = false) { const kvStore = await getKVStore() let data: object = await getBackupObject() let str: string = JSON.stringify(data) console.log('[Sync] backup value: ' + str); let newVersion: number = AppStorage.Get('LocalVersionNumber') console.log('[Sync] newVersion: ' + newVersion); kvStore.get(Version_Key, function (err, SyncVersion) { console.log("get success Version_Key: " + SyncVersion); console.log("get error: " + err); if (SyncVersion == undefined || SyncVersion < newVersion) { console.log('[Sync] newVersion: ' + newVersion); kvStore.put(Version_Key, newVersion) let i: number = 0; for (; i < str.length; i += MaxLength) { kvStore.put(Data_Key + (i.toString()), str.substring(i, i + MaxLength)) } kvStore.put(Length_Key, str.length) if (showPrompt) prompt.showToast({ message: '發送成功,快去看看吧!', duration: 1000, }); } else { if (showPrompt) prompt.showToast({ message: '發送失敗,發送數據不為最新', duration: 1000, }); } }); } /** * 從數據庫導入數據新版本 */ async function ImportNewVersion(): Promise[boolean, number, string]?> { let TerminalsSyncSwitch = AppStorage.Get('TerminalsSyncSwitch') if (!TerminalsSyncSwitch) return [false, 0, ''] const kvStore = await getKVStore() let newVersion: number = AppStorage.Get('LocalVersionNumber') console.log('[Sync] newVersion: ' + newVersion); return new Promise((resolve) => { kvStore.get(Version_Key, async function (err, SyncVersion) { console.log("get success Version_Key: " + SyncVersion); console.log("get error: " + err); if (SyncVersion != undefined && SyncVersion > newVersion) { let end: number = await kvStore.get(Length_Key) let obj: string = '' for (let i = 0; i < end; i += MaxLength) { obj += await kvStore.get(Data_Key + (i.toString())) } console.log("get success Data_Key: " + obj); console.log("get error: " + err); console.log('[Sync] import: ' + JSON.stringify(obj)); let ret = JSON.parse(obj) console.log('[Sync] import value: ' + JSON.stringify(ret)); backUpImpl.importData(ret, (flag: boolean, reason: string) =?> { resolve([flag, SyncVersion, reason]) }) } else { resolve([false, SyncVersion, '未接收到新數據']) } }); }) }
?
由于 KV 數據庫的 Value 有長度限制,我們可以拆解同步內容在不同的 Value 中,之后又再組合起來,每次發布版本時還應該打上時間戳標記進行對比,避免老版本覆蓋新版本。
四、軟件功能和界面操作說明
4.1 歡迎界面
在用戶首次點擊進入軟件時,會跳出該界面。會讓用戶進行隱私政策和用戶協議的閱讀,并同意后進行勾選,才可進入程序。
在此處,用戶可點擊高亮字體處的鏈接,打開用戶協議和隱私政策的界面,進行詳細的閱讀。我們希望通過隱私政策告知用戶如何處理其個人信息,并清晰地闡明了收集、存儲、使用、共享和保護用戶信息的方式,以及如何處理用戶的請求和投訴等。以及通過用戶協議規范用戶行為,其中包含軟件的使用限制、禁止的行為、用戶義務和責任、維權條款等,以防止用戶濫用軟件、違反法律法規和侵犯他人權利。
在用戶閱讀完并確認后,可以在上一界面,在是否同意處勾選后,點擊進入程序。
4.2 引導界面
在用戶首次點擊進入并通過用戶協議和隱私政策后,會進入引導界面。引導界面作為軟件使用過程中的一個重要組成部分,可以幫助用戶快速了解軟件的基本功能和操作方法,提高用戶的使用效率和體驗。在這里我們分別對修改,完成及添加待辦事項;收起,展開及切日歷,展開象限,快捷同步等功能進行了詳細的操作方式的介紹,以幫助用戶快速找到需要的功能,指引其完成操作,以提高軟件使用效率和體驗。
以下為部分引導界面所進行教學的操作。
若用戶在使用期間遺忘了引導界面介紹的操作方式,可以通過“設置-關于-打開引導界面”的路徑,重新喚起以上的引導界面,熟悉對應操作:
4.3 清單界面
在首次進入程序,通過歡迎界面和引導界面后,以及之后進入程序,都會進入該清單界面。即在下方頁簽欄處顯示為“清單”高亮的界面(平板橫置時該頁簽在左側)。同時,也可以通過該頁簽的點擊,切換至“日歷”、“四象限”或是“設置”界面。
在該清單界面左上方,有兩個下拉選擇按鈕,上方的可以進行日期的選擇,以查看對應日期的待辦事項。
下方的可以進行待辦單的選擇,即選擇查看選定日期下,對應待辦單或是全部待辦中的具體待辦事項。
在平板端 UI 界面中,下方的待辦單選擇下拉按鈕移動到左邊的選擇欄中,如下:
在下方是數據展示區域,其左邊,通過數字的形式向用戶顯示在所選擇的日子和選擇的對應待辦單下,已完成待辦和未完成待辦的數量。右邊則是一個百分比顯示環,能夠直觀的顯示用戶目前已完成的待辦占全部待辦的比例,以便幫助用戶更好地安排時間,合理分配精力,提高完成任務的效率。同時我們希望當用戶看到待辦百分比逐漸增加時,會感到自己取得了進步,從而增加完成任務的動力。
再下方是我們具體顯示在所選擇的日子和選擇的對應待辦單下,對應的全部“待完成”、“已過期”和“已完成”的待辦。這三者都可以通過點擊其名稱邊上的三角形,以打開或折疊對應分類中的待辦
這三者中,“待完成”指的是,在用戶設置的對應時間內,但還未完成或未達到全部完成次數的待辦。
這兩者可以在待辦第二行中看出區別,有“n/m”的是需要多次完成,且未全部完成的待辦,否則是未完成的單次待辦。
在一條待辦中,還有其他的信息,其中最左邊的圈的顏色,對應了用戶將該待辦存放在哪個待辦單中,即這個確認框的顏色和該待辦所歸類的待辦單的顏色保持一致。
第二欄中的感嘆號表示用戶是否將其列為重要待辦,若為重要代辦,也會在四象限中對應展示;五角星對應的是該待辦是否被用戶放入“我的收藏”;鬧鐘圖標對應的是用戶是否為該待辦設置了鬧鐘提醒。后面的“有效時間 | 循環規則”中,前面的表示該待辦的有效時間,全天指全天有效,如果給的是某一時間段就是在這每一時間段有效。后面的次數則是代表該待辦的重復方式,如“每天”就是每天出現,“每三天”就是每三天現需要完成一次。
“已過期”則是指,在當天中,當前時間已經過了該待辦對應的有效時間,故為已過期。其中已過期的待辦可以順延,點擊右側的順延即可,若要全部順延,則點擊“已過期”右邊的全部順延即可。
“已完成”則是指已經完成了的待辦,即完全完成(即多次的任務也全部完成)。其中,已完成的任務前面的勾是填充式的,且標題會有刪除線,并在待辦第二行中末尾會顯示完成時間。
此時長按前面的勾選部分,可以減少一次完成次數,使得該待辦重新成為待完成狀態。
如果是部分完成,前面的勾是線條式的。
如果長按待辦主體部分,可以呼出如下界面:
此時可以通過待辦后方的復選框,選擇對應待辦,進行收藏,移動,刪除,全選等操作。其中移動,刪除點擊后,對應界面如圖:
右下角的添加按鈕,單擊可以呼出添加待辦的添加界面,若是打開了設備同步,可以長按添加按鈕,一鍵向所有設備同步或是接收最新數據。
點擊待辦單的選擇欄最后一行,可以進行待辦分類的選擇以及待辦單添加的操作。
若是添加待辦單,則可以在跳出界面進行名字,顏色的選擇,如圖:
4.4 添加界面
通過清單界面右下角的添加按鈕單擊進入,再未展開前界面如下,可以輸入待辦名稱,選擇放入的待辦單,選擇是否收藏,是否重要,并選擇其生效時間。創建完成后點擊保存即可。
展開后的添加界面如下,可以添加備注,設置是否提醒以及對應提醒時間,設置重復規律,有效時間等。
4.5 日歷界面
在頁簽中,點擊日歷即可切換到日歷界面。默認的日歷界面會顯示當前月份中,每一天待辦的縮略,并會給出完成待辦比例的百分比環。
在左上角,有兩個下拉選擇按鈕,可以選擇月份和待辦單。選擇后,下方日歷會根據所選的情況顯示對應的內容。同時在當前日歷界面左右滑動可以切換月份。
若是選擇了某一天,或是點擊了下方的上箭頭,則會在下方顯示對應日子對應待辦單的全部待辦情況,其顯示規則與清單界面相同,故不再贅述。
其中上方的日歷部分會保留當前周的預覽,此時若左右滑動日歷部分,則是切換上下周情況。
4.6 四象限界面
在頁簽中,點擊四象限即可切換到四象限界面。
在四象限界面中,整個界面被分為四界面,分別是“重要且緊急”、“重要但不緊急”、“不重要但緊急”、“不重要且不緊急”。這里的重要是根據用戶在設置待辦中,是否選擇了感嘆號,即由用戶手動勾選是否重要。而緊急,則是由軟件自身根據算法,判斷當前時間與用戶設定的待辦有效時間間隔來判斷是否緊急。判斷后,會在根據用戶上方兩個下拉選擇欄選擇的條目篩選后,將該分類中的待辦,根據是否重要和是否緊急,分別顯示在四象限中。
其中,可以根據前方判定框,了解該待辦處于什么情況。空框為未完成,線條勾為完成部分,填充勾為全部完成。
同時點擊對應框的標題,可以打開該象限,觀察對應待辦的詳細細節。打開后再次點擊象限名可以收起該象限。
4.7 設置界面
在頁簽中,點擊設置即可切換到設置界面。
“本地備份”點擊后可以打開對應界面,之后可以開啟自動備份,即在每次退出應用時候自動備份?;蛘呖梢栽谙路近c擊立即備份以手動備份。同時可以點擊右側的刷新查看當前所有備份情況。
點擊“多端同步”后打開界面,開啟后可以下載或者上傳數據并儲存在分布式數據庫中。并且在下方可以查看已經連接的設備情況。
點擊“編輯待辦單”,可以對待辦單進行編輯,進行刪除,改名和更改顏色的操作。
點擊“主題色”,可以對軟件主題色進行更改,更改后需要重啟軟件才能生效。
點擊“默認重復時長”,可以更改默認重復時長,以便于用戶在創建待辦時,選擇重復時長更加方便。
點擊“默認提醒時間”,可以更改默認提醒時間,以便于用戶在創建待辦時,設置提醒時間時更加快捷。
點擊“星期開始于”,可以根據用戶習慣,更改由星期一開始或者星期日開始一周。
點擊“時間制式設置”,可以根據用戶習慣,更改時間制式為 12 小時制或 24 小時制。
點擊“常見問題”,可以查看一些常見問題的解答并了解咨詢方式。
點擊“用戶協議與隱私聲明”,可以查看本軟件的用戶協議與隱私聲明。
點擊“關于”,可以了解更多關于本軟件的信息,如軟件版本,官網網址,郵箱等。
五、總結
本文主要介紹了一個 oh 原生的,具有多端適配和同步備份功能的待辦清單類應用,不僅可以讓用戶添加、編輯、刪除、篩選、歸檔自己的任務,還可以讓用戶設置任務的優先級、截止日期、重復規則、提醒方式等多種屬性,讓用戶更靈活地管理自己的任務。我們還提供了日歷頁面、四象限頁面、多種萬能卡片等方式拓展用戶的使用場景,優化用戶的使用體驗。解決了市面上主流待辦清單類 APP 要么功能過于復雜,要么功能過于簡單,還有云端數據同步和安全性之間矛盾的問題。
本應用的優勢主要在于支持多設備,可以在不同的設備間交換和同步用戶的數據,讓用戶可以隨時隨地地查看和更新自己的任務清單。這些功能全都是在本地進行的,不必擔心數據泄露。同時因為是原生應用,我們的應用流暢穩定,占用空間小,設計也符合系統一致性。
還需要改進的地方主要是本地備份暫未做加密優化,有隱私數據泄露風險。同時暫未完成對其他端設備的支持(比如手表),這主要是最低支持 API 版本為 8 造成的影響,期待后續軟件的更新。
為了能讓大家更好的學習鴻蒙 (OpenHarmony) 開發技術,這邊特意整理了《鴻蒙 (OpenHarmony)開發學習手冊》,希望對大家有所幫助:
《鴻蒙(Harmony OS)開發學習手冊》
入門必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用開發導讀(ArKTS)
2.……
HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統定義
2.技術框架
3.技術特性
4.系統安全
快速入門:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構建第一個ArkTS應用
3.…
開發基礎知識:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用基礎知識
2.配置文件
3.應用數據管理
4.應用安全管理
5.應用隱私保護
6.三方應用調用管控機制
7.資源分類與訪問
8.學習ArkTS
9…
基于ArkTS 開發:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發
2.UI開發
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網絡與鏈接
8.電話服務
9.數據管理
10.后臺任務(Background Task)管理
11.設備管理
12.設備使用信息統計
13.DFX
14.國際化開發
15.折疊屏系列
16………
審核編輯 黃宇
-
鴻蒙
+關注
關注
57文章
2363瀏覽量
42889 -
HarmonyOS
+關注
關注
79文章
1977瀏覽量
30264
發布評論請先 登錄
相關推薦
評論