IT之家 7 月 19 日消息 華為 HarmonyOS 官方表示,之前為各位開(kāi)發(fā)者帶來(lái)首份 API 差異報(bào)告,不少開(kāi)發(fā)者還希望看到一份完整的 API 差異說(shuō)明,現(xiàn)在華為官方發(fā)布了完整的 API 差異報(bào)告。
IT之家獲悉,首先是版本信息說(shuō)明。目前發(fā)布 HarmonyOS SDK 2.2.0.1(API Version 6 Beta 1),相較上一版本 HarmonyOS SDK 2.1.1.21(API Version 5),SDK 的變更主要體現(xiàn)在兩個(gè)方面,分別是 Java API 變更(API 6 -> API 5)和 JS API 變更(API 6 -> API 5)。
下面是正式的差異報(bào)告解讀。
一、JS API 變更(API 6 -> API 5)
1. 新增提供功能子系統(tǒng)的 API
相較于 JS API Version 5 ,JS API Version 6 新增 API 如下表所示:
2. 變更差異
JS API Version 6,新增了較多原子化服務(wù)相關(guān)的接口,本文列舉了部分新增接口。
更多詳細(xì)的更新內(nèi)容請(qǐng)?jiān)L問(wèn)官網(wǎng)鏈接:https://developer.harmonyos.com/cn/docs/documentation/doc-releases/apidiff-js-api-6-phone-component-0000001170697425
(1)JS UI 框架子系統(tǒng)
新增了媒體、畫(huà)布、柵格組件,如下表所示:
(2) 泛 sensor 子系統(tǒng)
新增了方向傳感器及陀螺儀傳感器的訂閱、取消訂閱接口,如下表所示:
(3)文件子系統(tǒng)
原文件存儲(chǔ)“@system.file”接口,從 API Version 6 開(kāi)始不再維護(hù),推薦使用新接口 '@ohos.fileio' 進(jìn)行文件管理,新增部分接口如下表:
(4)網(wǎng)絡(luò)子系統(tǒng)
原數(shù)據(jù)請(qǐng)求 '@system.fetch',從 API Version 6 開(kāi)始不再維護(hù),推薦使用新接口 '@ohos.net.http' 發(fā)起 http 數(shù)據(jù)請(qǐng)求。新增部分接口如下表:
(5)分布式管理子系統(tǒng)
原數(shù)據(jù)存儲(chǔ) '@system.storage',從 API Version 6 開(kāi)始不再維護(hù),推薦使用新接口 '@ohos.data.storage' 進(jìn)行數(shù)據(jù)管理。新增部分接口如下表:
二、 Java API 變更(API 6 -> API 5)
1. 基礎(chǔ)能力增強(qiáng)
(1)Intent 新增 MissionTop 啟動(dòng) flag
Intent 中新增了應(yīng)用通過(guò) missionTop 模式啟動(dòng)的字段 FLAG_ABILITY_MISSION_TOP。如果啟動(dòng) ability 的現(xiàn)有實(shí)例已經(jīng)位于任務(wù)堆棧的頂部,則將重用該實(shí)例。否則,將創(chuàng)建新的 ability 實(shí)例。相關(guān)使用代碼如下:
Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() .withDeviceId("") .withBundleName("com.demo") .withAbilityName("com.demo.XxxAbility") .withFlags(Intent. FLAG_ABILITY_MISSION_TOP) .build(); intent.setOperation(operation); startAbility(intent);
(2)Intent 新增文件打開(kāi)相關(guān) Action 和 Entity
Class ohos.utils.IntentConstants 中新增了 Action 和 Entity,用于文件打開(kāi),如下所示:
String ACTION_EDIT_DATA = "ability.intent.EDIT_DATA"; String ACTION_SELECT = "ability.intent.SELECT"; String ACTION_SEND_DATA = "ability.intent.SEND_DATA"; String ACTION_SEND_MULTIPLE_DATA = "ability.intent.SEND_MULTIPLE_DATA"; String ACTION_SCAN_MEDIA_FILE = "ability.intent.SCAN_MEDIA_FILE"; String ACTION_VIEW_DATA = "ability.intent.VIEW_DATA"; String ENTITY_BROWSABLE = "entity.system.browsable";
開(kāi)發(fā)者需要打開(kāi)文件相關(guān)應(yīng)用時(shí),在 Intent 中設(shè)置對(duì)應(yīng) Action,代碼如下所示:
Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() .withDeviceId(“”) .withAction(IntentConstants.ACTION_EDIT_DATA) .withEntities(IntentConstants.ENTITY_BROWSABLE) .build(); intent.setOperation(operation); startAbility(intent);
(3)FA 流轉(zhuǎn)新增回調(diào)方法
Class ohos.aafwk.ability.continuation.IContinuationDeviceCallback 下新增了兩個(gè)方法,onConnected (ContinuationDeviceInfo deviceInfo) 和 onDisconnected ( String deviceId )。用于在 FA 主動(dòng)流轉(zhuǎn)時(shí),在選擇設(shè)備列表選擇設(shè)備的回調(diào)中,新增設(shè)備名稱(chēng)參數(shù),讓?xiě)?yīng)用區(qū)分流轉(zhuǎn)的具體設(shè)備。其中 ContinuationDeviceInfo 中包含 deviceId,deviceType,deviceName (新增) 字段,開(kāi)發(fā)者可以根據(jù)需要獲取。
JAVA API 6 廢棄原有回調(diào)方法 onDeviceConnectDone (StringdeviceId, String deviceType),onDeviceDisconnectDone (StringdeviceId);
2. 卡片服務(wù)能力強(qiáng)化
(1)實(shí)現(xiàn)卡片服務(wù)克隆
由于沒(méi)有卡片克隆功能,以往將卡片從舊設(shè)備遷移到新設(shè)備時(shí),系統(tǒng)默認(rèn)創(chuàng)建一個(gè)新的卡片,卡片原本攜帶的數(shù)據(jù)將不能克隆到新設(shè)備。本次更新,為卡片管理服務(wù) FMS 適配了克隆接口,實(shí)現(xiàn)卡片的克隆。
(2)獲取卡片狀態(tài)
小藝建議是 HarmonyOS2 上一款主動(dòng)推薦當(dāng)下所需服務(wù)和應(yīng)用的智慧化助手,在卡片智能推薦中,當(dāng)卡片的狀態(tài)未完成之前,可能會(huì)給消費(fèi)者推薦一張空白卡片,這樣對(duì)于消費(fèi)者來(lái)說(shuō)毫無(wú)意義。本次版本更新,Class ohos.aafwk.ability.Ability 中新增了 onAcquireFormState (Intent) 方法,提供獲取卡片狀態(tài)功能,通過(guò)調(diào)用 onAcquireFormState,詢(xún)問(wèn)卡片狀態(tài)是否 ready。只有卡片狀態(tài) ready 的情況下,才會(huì)顯示在小藝建議推薦位。
(3)設(shè)置下一次卡片刷新時(shí)間
以往的卡片刷新,以 30min 作為一個(gè)基礎(chǔ)值,按照 30*N(N=1、2、3、4..)來(lái)設(shè)置更新頻率。這無(wú)法滿(mǎn)足某些應(yīng)用如基金、航班類(lèi)的卡片刷新需求,因?yàn)閼?yīng)用希望能在某些時(shí)間段動(dòng)態(tài)的設(shè)置下次卡片的刷新時(shí)間。
本次版本更新中,Class ohos.aafwk.ability.Ability 中新增了 setFormNextRefreshTime (long,long) 方法,設(shè)置下次卡片刷新時(shí)間,用于卡片動(dòng)態(tài)定時(shí)刷新。設(shè)置的時(shí)間間隔最小是 5min,每天最多設(shè)置 50 次??ㄆ芾矸?wù)根據(jù)提供方設(shè)置的時(shí)間更新定時(shí)器,定時(shí)器到點(diǎn)后,觸發(fā)卡片應(yīng)用的更新回調(diào)。
3. 新增沙盒文件分享
(1) FileAbility
ohos.data.file 類(lèi)中新增了 FileAbility 能力,提供應(yīng)用沙盒文件分享的能力,用于沙盒內(nèi)文件的分享。獲取沙盒文件的流程如下所示:
class FileAbility 中封裝了獲取文件信息的方法。
public class FileAbility extends Ability { public FileAbility() { throw new RuntimeException("Stub!"); } public void onStart(Intent intent) { throw new RuntimeException("Stub!"); } public String getType(Uri uri) { throw new RuntimeException("Stub!"); } public String[] getFileTypes(Uri uri, String mimeTypeFilter) { throw new RuntimeException("Stub!"); } public FileDescriptor openFile(Uri uri, String mode) { throw new RuntimeException("Stub!"); } public static Uri getUriViaFile(Context context, String Authority, File file) { throw new RuntimeException("Stub!"); } public static File getFileViaUri(Uri uri) { throw new RuntimeException("Stub!"); } }
(2)FileAbility 開(kāi)發(fā)步驟
Step 1 聲明:
config.json 中配置 FileAbility 類(lèi),指明 ability 類(lèi)型為 data, 權(quán)限配置 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 配置轉(zhuǎn)換關(guān)系:
在 hap 包內(nèi) resources/rawfile/ 目錄下新建 fileability.json 的配置文件,用于配置 File 到 Uri 轉(zhuǎn)換關(guān)系,同時(shí)指明哪些文件目錄可以用來(lái)分享。配置轉(zhuǎn)換關(guān)系后,路徑會(huì)轉(zhuǎn)換為對(duì)應(yīng) 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 沙盒文件分享:
發(fā)送側(cè)調(diào)用 getUriViaFile ()
File photoFile = new File(getFilesDir(), "test.jpg"); Uri uri = FileAbility.getUriViaFile(getContext(), "/ohos.data.file.FileAbility", photoFile); Intent intent1 = new Intent(); intent1.addFlags(0x00000001); intent1.addFlags(Intent.FLAG_NOT_OHOS_COMPONENT); intent1.setUriAndType(uri, "image/png"); ElementName element = new ElementName("","com.os1devp.intentlication2","com.os1devp.intentlication2.MainAbility"); intent1.setElement(element); startAbility(intent1);
接收側(cè)調(diào)用 DataAbility.open () 獲取文件句柄,處理沙盒文件:
DataAbilityHelper helper = DataAbilityHelper.creator(getContext()); Uri intentUri = intent.getOperation().getUri(); FileDescriptor fs = helper.openFile(intentUri, "r");
4. 新增后臺(tái)代理提醒
(1)原方案
如下圖所示,在原來(lái)的方案中,通過(guò) Timer 類(lèi)實(shí)現(xiàn)定時(shí)提醒,需要在后臺(tái)拉起或者喚醒應(yīng)用,導(dǎo)致后臺(tái)應(yīng)用對(duì)系統(tǒng)資源的占用,影響前臺(tái)應(yīng)用的用戶(hù)體驗(yàn)。
(2)改進(jìn)方案
能不能實(shí)現(xiàn)一個(gè)后臺(tái)代理提醒的功能?統(tǒng)一托管所有提醒業(yè)務(wù),在應(yīng)用凍結(jié)或者退出之后,仍可進(jìn)行倒計(jì)時(shí)、日歷、鬧鐘的系統(tǒng)提醒?,F(xiàn)在,他來(lái)了!
如下圖所示,開(kāi)發(fā)者可以使用后臺(tái)代理提醒的能力。通過(guò)后臺(tái)代理實(shí)現(xiàn)定時(shí)提醒的同時(shí),實(shí)現(xiàn)對(duì)后臺(tái)應(yīng)用的嚴(yán)格管控,減少后臺(tái)應(yīng)用被拉起或者喚醒次數(shù),從而節(jié)省系統(tǒng)資源的開(kāi)銷(xiāo)。
(3)新增內(nèi)容
如何實(shí)現(xiàn)后臺(tái)代理功能?在本次 API 更新中,Package ohos.event.notification 中新增了 5 大基礎(chǔ)類(lèi),包括 ReminderHelper、ReminderRequest、ReminderRequestTimer、ReminderRequestCalendar、ReminderRequestAlarm,基礎(chǔ)類(lèi)之間的關(guān)系如下圖所示:
Class ReminderHelper 中封裝了代理通知基本操作,包括發(fā)布定時(shí)提醒類(lèi)通知、注冊(cè)提醒類(lèi)需要使用的實(shí)例,取消指定的提醒類(lèi)通知、取消當(dāng)前應(yīng)用設(shè)置的所有提醒。
Class ReminderRequest 中封裝了通知提醒的基本方法,包括獲取設(shè)置的提醒時(shí)長(zhǎng)、獲取設(shè)置的延遲提醒次數(shù)、獲取提醒的標(biāo)題等。
Class ReminderRequestTimer,提醒類(lèi)子類(lèi),用于鬧鐘類(lèi)提醒。
Class ReminderRequestCalendar,提醒類(lèi)子類(lèi),用于日歷類(lèi)提醒。
Class ReminderRequestAlarm,提醒類(lèi)子類(lèi),用于倒計(jì)時(shí)提醒。
5. 新增支持 continueAbility 免安裝拉起 FA
在以往的跨端遷移過(guò)程中,需要兩臺(tái)設(shè)備都安裝對(duì)應(yīng)的 FA,否則將無(wú)法實(shí)現(xiàn)跨端遷移。本次更新,增強(qiáng)了 continueAbility 接口功能,在指定 deviceId 情況下,如果檢測(cè)到遠(yuǎn)端設(shè)備未安裝 FA,遠(yuǎn)端設(shè)備的框架會(huì)自動(dòng)向 HAG 查詢(xún)、下載并安裝 FA 并將其拉起。
此外,IAbilityContinuation 接口中還新增了異?;卣{(diào)函數(shù)及錯(cuò)誤碼,如下所示:
public interface IAbilityContinuation { int ERR_ABILITY_QUERY_FAILED = -2; int ERR_CONTINUE_TIMEOUT = -8; int ERR_DEVICE_OFFLINE = -9; int ERR_INSTALL_FREE_NOT_SUPPORTED = -4; int ERR_NETWORK_UNAVAILABLE = -3; int ERR_PARAMETER_INVALID = -6; int ERR_PERMISSION_DENIED = -5; int ERR_REMOTE_DEVICE_INCOMPATIBLE = -7; int ERR_UNKNOWN = -1; int SUCCESS = 0; default void onFailedContinuation(int errorCode) { throw new RuntimeException("Stub!"); } }
6. 其他新增功能
(1)StartAbility()
Class ohos.aafwk.ability.Ability 中新增了帶有回調(diào)參數(shù)的方法 startAbility (Intent,IAbilityStartCallback), 作用是在對(duì)端 Ability 免安裝成功拉起后,回調(diào)開(kāi)發(fā)者。避免了 Ability 在對(duì)端設(shè)備啟動(dòng)過(guò)程中的盲目等待。
(2)getIconId()、getLabelId()
Class ohos.bundle.ApplicationInfo 中新增了 getIconId ()、getLabelId () 兩個(gè)方法,用于在 feature 沒(méi)有配置 HomeAbility 的情況下,獲取到應(yīng)用的 label 和 icon。Label 是應(yīng)用的標(biāo)簽,icon 為應(yīng)用的圖標(biāo)。
三、總結(jié)
本次版本更新,新增內(nèi)容較多,特別是 JS API 部分,新增了較多原子化服務(wù)相關(guān)的接口,感興趣的用戶(hù)可以點(diǎn)擊,前往官網(wǎng)地址下載,升級(jí)嘗鮮吧!
https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。