鴻蒙HarmonyOS應用開發:從零開始開發HarmonyOS應用
https://harmonyos.51cto.com/#zz
2020年9月10日,HarmonyOS 2.0的發布對于IT界來說又是一件翹首以盼的大事。發布會上,華為消費者業務軟件部總裁王成錄為開發者帶來了一個全面升級的華為鴻蒙版本,各方面能力的大幅提升,完整的應用開發生態,超級終端的全場景生態,即將開啟移動生態的下一下新紀元。
在參加完鴻蒙2.0的發布會后,又周轉于9月11日華為聯合南北向業務合作伙伴以及應用生態合作伙伴共同主持的各技術分論壇活動。作為一名從事移動應用相關產業近十余年的工作者,自然是對華為鴻蒙2.0提供的完整的應用開發生態更為感興趣。
《從零開始開發HarmonyOS應用》是華為展示的第一個鴻蒙應用示例,示例簡單的介紹了多設備自適應布局、輸入事件處理、和跨設備流轉。
1 創建應用工程
使用 DevEco Studio 創建應用工程,在菜單欄打開“File>New>New Project”,在彈出的對話框中選擇java工程模板。

選擇好模板之后點擊“Next”,在下一個界面中指定“Project Name”和“Package Name”,然后點擊“Finish”即可建立工程。
一個建立好的工程包含以下目錄:

2 設計用戶界面
在Java UI框架中,提供了兩種編寫布局的方式:在XML中聲明UI布局和在代碼中創建布局。這兩種方式創建出的布局沒有本質差別,此例主要通過XML的方式編寫應用的頁面。
2.1 XML編寫頁面
2.1.1 新建XML頁面
在“Project”窗口,打開“entry > src > main > resources > base”,右鍵點擊“base”文件夾,選擇“New > Directory”,命名為“layout”。
右鍵點擊“layout”文件夾,選擇“New > File”命名為“main_layout.xml”。
在“layout”文件夾下可以看到新增了“main_layout.xml”文件。

2.1.2 編寫XML代碼
這個示例中自適應布局的實現,主要是基于AdaptiveBoxLayout新的布局樣式,它可以將布局在橫豎屏設備上進行自適應分布排列。開發者可以將布局代碼寫在“main_layout.xml”文件,關于布局代碼怎樣實現可以參考https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-layout-xml-0000000000500395。
如果布局中引用到圖片資源,需要將圖片放到 “resources>base>media ”。


2.2加載XML布局
在“Project”窗口中,選擇“entry > src > main > java > com.huawei.example.helloworld > slice”,打開“MainAbilitySlice.java”文件。重寫onStart()方法加載XML布局,示例代碼如下:
- 1.package com.huawei.example.helloworld.slice;
- 2.import com.huawei.example.helloworld.ResourceTable;
- 3.import ohos.aafwk.ability.AbilitySlice;
- 4.import ohos.aafwk.content.Intent;
- 5.
- 6.public class MainAbilitySlice extends AbilitySlice {
- 7.
- 8. @Override
- 9. public void onStart(Intent intent) {
- 10. super.onStart(intent);
- 11. super.setUIContent(ResourceTable.Layout_main_layout); // 加載XML布局
- 12. }
- 13.
- 14. @Override
- 15. public void onActive() {
- 16. super.onActive();
- 17. }
- 18.
- 19. @Override
- 20. public void onForeground(Intent intent) {
- 21. super.onForeground(intent);
- 22. }
- 23.}
應用運行效果如圖所示:

3 輸入事件處理
輸入事件包括兩種,一種是觸控事件,一種是按鍵事件。
3.1 觸控事件
組件的一個重要作用是當用戶點擊組件時,會執行相應的操作或者界面出現相應的變化。用戶點擊組件時,組件對象將收到一個點擊事件。開發者可以自定義響應點擊事件的方法。例如,通過創建一個Component.ClickedListener對象,然后通過調用setClickedListener將其分配給組件。示例代碼如下:
- 1. //1.先導入ohos.agp.components.Image
- 2. //2.從定義的xml中獲取Image對象
- 3. Image remote = (Image) findComponentById(ResourceTable.Id_remote);
- 4. //3.為Image設置點擊事件回調
- 5. remote.setClickedListener(component -> {
- 6. //4.此處添加點擊按鈕后的事件處理邏輯
- 7. migrateAbility();
- 8. });
3.2 按鍵點擊事件
當設備按鍵按下時,相應的Ability對象將收到一個KeyEvent事件。開發者可以自定義響應點擊事件的方法。
一個示例代碼如下:
- 1.public boolean onKeyEvent(Component component, KeyEvent keyEvent) {
- 2. if (keyEvent.isKeyDown()
- 3. && keyEvent.getKeyCode() == KeyEvent.KEY_DPAD_CENTER
- 4. && component.getId() == ResourceTable.Id_remote) {
- 5. continueAbility();
- 6. return true;
- 7. }
- 8. return false;
- 9.}
4 跨設備流轉
4.1 申請權限
權限即系統用于控制第三方應用或服務訪問用戶敏感個人數據或操作敏感能力的授權方式,當第三方應用或服務嘗試訪問用戶個人數據或操作敏感能力時,系統通過彈窗的形式請求用戶授權。用戶可授權此應用使用相關權限,后續也可取消此授權。例如打車類應用為了定位,在獲取用戶的地理位置信息前需向用戶申請,用戶同意此應用使用,后續也可取消此授權。
當使用“流轉”功能需要申請遷移權限DISTRIBUTED_DATASYNC。
4.1.1 在config.json中聲明權限
- 1. "reqPermissions": [
- 2. {
- 3. "name": "ohos.permission.DISTRIBUTED_DATASYNC"
- 4. }
- 5. ]
4.1.2 在MainAbilitySlice.java中請求權限
- 1.private void migrateAbility() {
- 2. if (verifySelfPermission(SystemPermission.DISTRIBUTED_DATASYNC)
- 3. == IBundleManager.PERMISSION_GRANTED) {
- 4. this.continueAbility();
- 5. } else {
- 6. requestPermission(SystemPermission.DISTRIBUTED_DATASYNC);
- 7. }
- 8.}
4.2 跨設備流轉
僅continueAbility一行代碼即可完成應用在設備之間流轉,依托的還是鴻蒙OS的分布式軟總線、分布式數據庫的能力。在此基礎上將這些能力通過接口的形式提供開發者。
事實上流轉并非“一行代碼可以完成”,如果開發者想在流轉過程中做更多的事情,那么可以通過IAbilifyContinuation接口中的方法進行實現。
IAbilityContinuation接口方法說明如下:
接口名稱說明
Ability以及AbilitySlice都需要實現IAbilityContinuation接口,并實現其中的方法。示例代碼如下 :
- 1. @Override
- 2. public boolean onStartContinuation() {
- 3. return true;
- 4. }
- 5.
- 6. @Override
- 7. public boolean onSaveData(IntentParams intentParams) {
- 8. return true;
- 9. }
- 10.
- 11. @Override
- 12. public boolean onRestoreData(IntentParams intentParams) {
- 13. return true;
- 14. }
- 15.
- 16. @Override
- 17. public void onCompleteContinuation(int i) {
- 18.
- 19. }
通過示例講解及代碼開發過程解讀,新的布局管理,新的資源文件結構,預示更為簡潔且功能更為強大的應用開發生態已經誕生。相信豐富的系統API將帶給我們開發者更多的便利及更強大的能力。
https://harmonyos.51cto.com/#zz