1. 程式人生 > 資訊 >華為鴻蒙 HarmonyOS API Version 6 關鍵差異點官方解讀:JS API 和 Java API 變更

華為鴻蒙 HarmonyOS API Version 6 關鍵差異點官方解讀:JS API 和 Java API 變更

7 月 19 日訊息華為 HarmonyOS 官方表示,之前為各位開發者帶來首份 API 差異報告,不少開發者還希望看到一份完整的 API 差異說明,現在華為官方釋出了完整的 API 差異報告。

獲悉,首先是版本資訊說明。目前釋出 HarmonyOS SDK 2.2.0.1(API Version 6 Beta 1),相較上一版本 HarmonyOS SDK 2.1.1.21(API Version 5),SDK 的變更主要體現在兩個方面,分別是 Java API 變更(API 6 -> API 5)和 JS API 變更(API 6 -> API 5)。

下面是正式的差異報告解讀。

一、JS API 變更(API 6 -> API 5)

1. 新增提供功能子系統的 API

相較於 JS API Version 5 ,JS API Version 6 新增 API 如下表所示:

2. 變更差異

JS API Version 6,新增了較多原子化服務相關的介面,本文列舉了部分新增介面。

更多詳細的更新內容請訪問官網連結:https://developer.harmonyos.com/cn/docs/documentation/doc-releases/apidiff-js-api-6-phone-component-0000001170697425

(1)JS UI 框架子系統

新增了媒體、畫布、柵格元件,如下表所示:

(2) 泛 sensor 子系統

新增了方向感測器及陀螺儀感測器的訂閱、取消訂閱介面,如下表所示:

(3)檔案子系統

原檔案儲存“@system.file”介面,從 API Version 6 開始不再維護,推薦使用新介面 '@ohos.fileio' 進行檔案管理,新增部分介面如下表:

(4)網路子系統

原資料請求 '@system.fetch',從 API Version 6 開始不再維護,推薦使用新介面 '@ohos.net.http' 發起 http 資料請求。新增部分介面如下表:

(5)分散式管理子系統

原資料儲存 '@system.storage',從 API Version 6 開始不再維護,推薦使用新介面 '@ohos.data.storage' 進行資料管理。新增部分介面如下表:

二、Java API 變更(API 6 -> API 5)

1. 基礎能力增強

(1)Intent 新增 MissionTop 啟動 flag

Intent 中新增了應用通過 missionTop 模式啟動的欄位 FLAG_ABILITY_MISSION_TOP。如果啟動 ability 的現有例項已經位於任務堆疊的頂部,則將重用該例項。否則,將建立新的 ability 例項。相關使用程式碼如下:

Intentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withDeviceId("").withBundleName("com.demo").withAbilityName("com.demo.XxxAbility").withFlags(Intent.FLAG_ABILITY_MISSION_TOP).build();intent.setOperation(operation);startAbility(intent);

(2)Intent 新增檔案開啟相關 Action 和 Entity

Class ohos.utils.IntentConstants 中新增了 Action 和 Entity,用於檔案開啟,如下所示:

StringACTION_EDIT_DATA="ability.intent.EDIT_DATA";StringACTION_SELECT="ability.intent.SELECT";StringACTION_SEND_DATA="ability.intent.SEND_DATA";StringACTION_SEND_MULTIPLE_DATA="ability.intent.SEND_MULTIPLE_DATA";StringACTION_SCAN_MEDIA_FILE="ability.intent.SCAN_MEDIA_FILE";StringACTION_VIEW_DATA="ability.intent.VIEW_DATA";StringENTITY_BROWSABLE="entity.system.browsable";

開發者需要開啟檔案相關應用時,在 Intent 中設定對應 Action,程式碼如下所示:

Intentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withDeviceId(“”).withAction(IntentConstants.ACTION_EDIT_DATA).withEntities(IntentConstants.ENTITY_BROWSABLE).build();intent.setOperation(operation);startAbility(intent);

(3)FA 流轉新增回撥方法

Classohos.aafwk.ability.continuation.IContinuationDeviceCallback 下新增了兩個方法,onConnected (ContinuationDeviceInfo deviceInfo) 和 onDisconnected ( String deviceId )。用於在 FA 主動流轉時,在選擇裝置列表選擇裝置的回撥中,新增裝置名稱引數,讓應用區分流轉的具體裝置。其中 ContinuationDeviceInfo 中包含 deviceId,deviceType,deviceName (新增) 欄位,開發者可以根據需要獲取。

JAVA API 6 廢棄原有回撥方法 onDeviceConnectDone (StringdeviceId, String deviceType),onDeviceDisconnectDone (StringdeviceId);

2. 卡片服務能力強化

(1)實現卡片服務克隆

由於沒有卡片克隆功能,以往將卡片從舊裝置遷移到新裝置時,系統預設建立一個新的卡片,卡片原本攜帶的資料將不能克隆到新裝置。本次更新,為卡片管理服務 FMS 適配了克隆介面,實現卡片的克隆。

(2)獲取卡片狀態

小藝建議是 HarmonyOS2 上一款主動推薦當下所需服務和應用的智慧化助手,在卡片智慧推薦中,當卡片的狀態未完成之前,可能會給消費者推薦一張空白卡片,這樣對於消費者來說毫無意義。本次版本更新,Class ohos.aafwk.ability.Ability 中新增了 onAcquireFormState (Intent) 方法,提供獲取卡片狀態功能,通過呼叫 onAcquireFormState,詢問卡片狀態是否 ready。只有卡片狀態 ready 的情況下,才會顯示在小藝建議推薦位。

(3)設定下一次卡片重新整理時間

以往的卡片重新整理,以 30min 作為一個基礎值,按照 30*N(N=1、2、3、4..)來設定更新頻率。這無法滿足某些應用如基金、航班類的卡片重新整理需求,因為應用希望能在某些時間段動態的設定下次卡片的重新整理時間。

本次版本更新中,Class ohos.aafwk.ability.Ability 中新增了 setFormNextRefreshTime (long,long) 方法,設定下次卡片重新整理時間,用於卡片動態定時重新整理。設定的時間間隔最小是 5min,每天最多設定 50 次。卡片管理服務根據提供方設定的時間更新定時器,定時器到點後,觸發卡片應用的更新回撥。

3. 新增沙盒檔案分享

(1)FileAbility

ohos.data.file 類中新增了 FileAbility 能力,提供應用沙盒檔案分享的能力,用於沙盒內檔案的分享。獲取沙盒檔案的流程如下所示:

class FileAbility 中封裝了獲取檔案資訊的方法。

publicclassFileAbilityextendsAbility{publicFileAbility(){thrownewRuntimeException("Stub!");}publicvoidonStart(Intentintent){thrownewRuntimeException("Stub!");}publicStringgetType(Uriuri){thrownewRuntimeException("Stub!");}publicString[]getFileTypes(Uriuri,StringmimeTypeFilter){thrownewRuntimeException("Stub!");}publicFileDescriptoropenFile(Uriuri,Stringmode){thrownewRuntimeException("Stub!");}publicstaticUrigetUriViaFile(Contextcontext,StringAuthority,Filefile){thrownewRuntimeException("Stub!");}publicstaticFilegetFileViaUri(Uriuri){thrownewRuntimeException("Stub!");}}

(2)FileAbility 開發步驟

Step 1 宣告:

config.json 中配置 FileAbility 類,指明 ability 型別為 data, 許可權配置 grantPermission : true。

{"name":"ohos.data.file.FileAbility","icon":"$media:icon","description":"$string:myfileability_description","type":"data","visible":true,"uri":"dataability://ohos.data.file.FileAbility","grantPermission":true}

Step 2 配置轉換關係:

在 hap 包內 resources/rawfile/ 目錄下新建 fileability.json 的配置檔案,用於配置 File 到 Uri 轉換關係,同時指明哪些檔案目錄可以用來分享。配置轉換關係後,路徑會轉換為對應 name。fileability.json 的配置檔案如下所示:

{"paths":[{"tag":"fileability-external-path","name":"external_storage_root","path":"."},{"tag":"fileability-files-path","name":"files-path","path":"."},{"tag":"fileability-cache-path","name":"cache-path","path":"."},{"tag":"fileability-external-files-path","name":"external_file_path","path":"."},{"tag":"fileability-external-cache-path","name":"external_cache_path","path":"."},{"tag":"fileability-root-path","name":"root-path","path":""}]}

Step 3 沙盒檔案分享:

傳送側呼叫 getUriViaFile ()

FilephotoFile=newFile(getFilesDir(),"test.jpg");Uriuri=FileAbility.getUriViaFile(getContext(),"/ohos.data.file.FileAbility",photoFile);Intentintent1=newIntent();intent1.addFlags(0x00000001);intent1.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT);intent1.setUriAndType(uri,"image/png");ElementNameelement=newElementName("","com.os1devp.intentlication2","com.os1devp.intentlication2.MainAbility");intent1.setElement(element);startAbility(intent1);

接收側呼叫 DataAbility.open () 獲取檔案控制代碼,處理沙盒檔案:

DataAbilityHelperhelper=DataAbilityHelper.creator(getContext());UriintentUri=intent.getOperation().getUri();FileDescriptorfs=helper.openFile(intentUri,"r");

4. 新增後臺代理提醒

(1)原方案

如下圖所示,在原來的方案中,通過 Timer 類實現定時提醒,需要在後臺拉起或者喚醒應用,導致後臺應用對系統資源的佔用,影響前臺應用的使用者體驗。

(2)改進方案

能不能實現一個後臺代理提醒的功能?統一託管所有提醒業務,在應用凍結或者退出之後,仍可進行倒計時、日曆、鬧鐘的系統提醒。現在,他來了!

如下圖所示,開發者可以使用後臺代理提醒的能力。通過後臺代理實現定時提醒的同時,實現對後臺應用的嚴格管控,減少後臺應用被拉起或者喚醒次數,從而節省系統資源的開銷。

(3)新增內容

如何實現後臺代理功能?在本次 API 更新中,Package ohos.event.notification 中新增了 5 大基礎類,包括 ReminderHelper、ReminderRequest、ReminderRequestTimer、ReminderRequestCalendar、ReminderRequestAlarm,基礎類之間的關係如下圖所示:

Class ReminderHelper 中封裝了代理通知基本操作,包括髮布定時提醒類通知、註冊提醒類需要使用的例項,取消指定的提醒類通知、取消當前應用設定的所有提醒。

Class ReminderRequest 中封裝了通知提醒的基本方法,包括獲取設定的提醒時長、獲取設定的延遲提醒次數、獲取提醒的標題等。

Class ReminderRequestTimer,提醒類子類,用於鬧鐘類提醒。

Class ReminderRequestCalendar,提醒類子類,用於日曆類提醒。

Class ReminderRequestAlarm,提醒類子類,用於倒計時提醒。

5.新增支援 continueAbility 免安裝拉起 FA

在以往的跨端遷移過程中,需要兩臺裝置都安裝對應的 FA,否則將無法實現跨端遷移。本次更新,增強了 continueAbility 介面功能,在指定 deviceId 情況下,如果檢測到遠端裝置未安裝 FA,遠端裝置的框架會自動向 HAG 查詢、下載並安裝 FA 並將其拉起。

此外,IAbilityContinuation 介面中還新增了異常回調函式及錯誤碼,如下所示:

publicinterfaceIAbilityContinuation{intERR_ABILITY_QUERY_FAILED=-2;intERR_CONTINUE_TIMEOUT=-8;intERR_DEVICE_OFFLINE=-9;intERR_INSTALL_FREE_NOT_SUPPORTED=-4;intERR_NETWORK_UNAVAILABLE=-3;intERR_PARAMETER_INVALID=-6;intERR_PERMISSION_DENIED=-5;intERR_REMOTE_DEVICE_INCOMPATIBLE=-7;intERR_UNKNOWN=-1;intSUCCESS=0;defaultvoidonFailedContinuation(interrorCode){thrownewRuntimeException("Stub!");}}

6. 其他新增功能

(1)StartAbility()

Class ohos.aafwk.ability.Ability 中新增了帶有回撥引數的方法 startAbility (Intent,IAbilityStartCallback), 作用是在對端 Ability 免安裝成功拉起後,回撥開發者。避免了 Ability 在對端裝置啟動過程中的盲目等待。

(2)getIconId()、getLabelId()

Class ohos.bundle.ApplicationInfo 中新增了 getIconId ()、getLabelId () 兩個方法,用於在 feature 沒有配置 HomeAbility 的情況下,獲取到應用的 label 和 icon。Label 是應用的標籤,icon 為應用的圖示。

三、總結

本次版本更新,新增內容較多,特別是 JS API 部分,新增了較多原子化服務相關的介面,感興趣的使用者可以點選,前往官網地址下載,升級嚐鮮吧!

https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta