-[Compilation and Building](#Compilation-and-Building)
-[Usage](#Usage)
-[Available APIs](#Available-APIs)
-[How to Use](#How-to-Use)
-[Repositories Involved](#Repositories-Involved)
[Title Description] Use **Subsystem** or **Part** based on the Readme file type.

## Introduction
[Writing Instructions] **Mandatory**. The following contents must be included:
**Overall introduction.** Describe the subsystem from the following aspects: background (role in the entire OpenHarmony architecture), functions, use cases, and supported devices.
**Architecture diagram.** Provide an architecture diagram and explain the main components in the architecture.
**If this document is about a part, which is part of a subsystem, and related concepts of the subsystem can help understand the part, you are advised to include the following information:**
**For more concepts related to the ***exampleName*** subsystem, see ***exampleName***. (Provide the link to the subsystem readme.)**
The precautions for writing are as follows:
| Item| Requirement|
| -------- | -------- |
| **A.1** | **Content**|
| A.1.1 | Style: Use formal language and avoid colloquial language.|
| A.1.2 | Compliance: Do not use terms that have compliance and legal risks, such as concepts specific to third-party intellectual property rights.|
| A.1.3 | Concise: Provide only necessary and minimum information to instruct developers to complete operations as soon as possible.|
| A.1.4 | Correct: The code and parameters in the Readme file must be consistent with the actual product information.|
| A.1.5 | Accurate: Use accurate rather than ambiguous description.|
| A.1.6 | Consistent: Words and concepts in the Readme file must be used consistently across the file and compliant with the glossary. The full name of an acronym or abbreviation must be provided when it appears for the first time in the file.|
| A.1.7 | Specific: Use specific words. For example, when indicating the quantity or degree, do not use "more" or "less". Use specific numbers instead.|
| **A.2** | **Format**|
| A.2.1 | Use punctuation correctly. End a sentence with punctuation.|
| A.2.2 | Present the content clearly, for example, by using bullets or categories. Do not include a single bullet or extra empty lines.|
| A.2.3 | Do not add a space between an English word and Chinese word.|
| A.2.4 | Use valid and specific links that provide direct redirection or download. It is recommended that relative links in Gitee instead of absolute links be used.|
| A.2.5 | For auxiliary description, use the "Note" format. For declaration in advance, use the "Notice" format.|
| **A.3** | **Tables**|
| A.3.1 | Include a caption for each table. Use nouns or noun phrases in the caption.|
| A.3.2 | Include a header for each table. Ensure that a table contains at least two rows and two columns.|
| A.3.3 | If there is no content in a table cell, use an underscore (_) in the cell, rather than leaving it blank.|
| **A.4** | **Figures**|
| A.4.1 | Do not include figures of religious beliefs.|
| A.4.2 | Include a caption for each figure. Use nouns or noun phrases in the caption.|
| A.4.3 | Figures must be clear, legible, complete, and easy to read. For example, a flowchart must contain "Start" and "End".|
| A.4.4 | Each figure must have clear logic and be provided with relevant text descriptions.|
| A.4.5 | It is recommended that each figure, in .png format, have the size less than or equal to 150 KB, the height about 640 px, and the width less than or equal to 820 px.|
| A.4.6 | Try not to include text in figures. If text is required, make sure the text language is consistent with your file's language.|
The following shows an architecture diagram. Pay attention to the **color and format requirements**.
**Figure 1** Subsystem architecture

## Directory Structure
[Writing Instructions] **Mandatory**. Describe the code directory structure of the project repository and function description of the corresponding directory.
```undefined
/foundation/ace
├── frameworks # Framework code
│ └── lite
│ ├── examples # Sample code
│ ├── include # Exposed header files
│ ├── packages # JS implementation
│ ├── src # Source code
│ ├── targets # Configuration file of each target device
│ └── tools # Tool code
├── interfaces # APIs exposed externally
│ └── innerkits # Header files for internal subsystems
│ └── builtin # Third-party module APIs provided by the JS application framework
```
## Constraints
[Writing Instructions] **Optional**. Include the conditions for project running, for example, a specific programming language or a specific operating system with a given version.
| Item| Requirement|
| -------- | -------- |
| D.1.1 | Clearly specify the function limitations or operation restrictions.|
| D.1.2 | Describe only constraints that affect task development or user experience.|
| D.1.3 | Describe operations that are prone to errors in the procedure, but not in this section.|
## Compilation and Building
[Writing Instructions] **Optional**. This section is not required for a subsystem Readme file. Include this section in a part Readme file based on the actual conditions.
## Usage
### Available APIs
[Writing Instructions] **Optional**. Describe the APIs related to the development guide so that developers can have a general understanding of the APIs before development. **This section is not required for a subsystem Readme file.** Determine whether this section is required for a part Readme file based on the actual conditions. If the corresponding API reference is available, you do not need to include this section. The precautions for writing are as follows:
| Item| Requirement|
| -------- | -------- |
| J.1.1 | Include only APIs relevant to the development task.|
| J.1.2 | Provide only main APIs if there are too many APIs.|
### How to Use
[Writing Instructions] **Optional**. Provide a concept introduction for a subsystem Readme file and function introduction for a part Readme file. If the corresponding development guide is available, you can provide a link, rather than details here.
The table below describes the writing requirements. After finishing the writing, check your content against these requirements one by one.
| Item| Requirement|
| -------- | -------- |
| **F.1** | **Writing a Development Procedure**|
| F.1.1 | Complete: Provide all mandatory steps.|
| F.1.2 | Clear: The logic of the writing must be clear and reasonable. The overview, preparations, and operations in the document must be described by following certain logic, and the chapters should not be broken or contradictory.|
| F.1.3 | Sentence pattern for tasks: Use verbs + nouns to describe actions in titles or sentences.|
| F.1.4 | Prevention in advance: If the operation involves restrictions, errors, or potential risks, describe them in advance.|
| F.1.5 | Clear steps-1: Describe the purpose of each step, no matter whether it is simple or not.|
| F.1.6 | Clear steps-2: Specify the environment, tools, operations, and how-to.|
| F.1.7 | If an operation is optional, specify the conditions in which the operation is required.|
| F.1.8 | After the development procedure is complete, specify the expected results.|
| **F.2** | **Writing a Code Segment**|
| F.2.1 | If a code segment involves commands to be copied by developers, display the commands in editable mode, instead of using screenshots. Use code snippets to wrap the commands.|
| F.2.2 | Provide comments for key sections and key steps in the code.|
| F.2.3 | The code display meets the code indentation requirements.|
| F.2.4 | If an API call is involved in a step, provide the API and its usage description or sample code. The code should come from specific instances.|
## Repositories Involved
[Writing Instructions] **Mandatory**. List the links of all related repositories of the subsystem where the current repository is located and mark the current repository in bold.
*Template positioning: When a third-party development board is introduced to OpenHarmony, the board vendor needs to provide an introduction to the board for developers to quickly understand the board.*
## Introduction
*[Writing Instructions]*
*Describe the functions, scenarios, and key features supported by the development board.*
*Provide a picture to show the appearance of the development board.*
*Provide a bottom board picture.*
*Provide a functional block diagram and an introduction.*
-[Acquiring Source Code Using the repo Tool](#Acquiring-Source-Code-Using-the-repo-Tool)
-[Acquiring Source Code from a Mirror](#Acquiring-Source-Code-from-a-Mirror)
-[What's New](#What-Is-New)
-[Feature Updates](#Feature-Updates)
-[API Updates](#API-Updates)
-[Chip and Development Board Adaptation](#Chip-and-Development-Board-Adaptation)
-[Samples & Codelabs](#samples-amp-codelabs)
-[New Samples](#New-Samples)
-[New Codelabs](#New-Codelabs)
-[Resolved Issues](#Resolved-Issues)
-[Known Issues](#Known-Issues)
## Version Description
OpenHarmony 3.1 Beta provides the following enhancements over OpenHarmony 3.0 LTS:
- Enhanced basic capabilities for the standard system: The CMA usage is improved in the kernel. The background rendering module of RenderService is added to the Graphics subsystem. The STA and SoftAP features are provided for short-range communications. The geomagnetic field algorithm APIs are provided. The sensor driver model capability is enhanced. Application account query and subscription are supported. New globalization features are introduced. Unified build templates are provided for the Compilation and Building subsystem. Front-end compilation toolchains for Windows, macOS, and Linux are provided for the Multi-language Runtime subsystem. Previewer is supported for JS runtime. Six third-party JS libraries (JSON Processing, EventBus, VCard, Protobuf, RxJS, and libphonenumber) are supported. Time and time zone management is supported. The HiSysEvent module is added to DFX to provide query and subscription interfaces.
- Enhanced distributed capabilities for the standard system: The distributed device profile is added. Distributed data management supports cross-device synchronization and subscription. DSoftBus supports network switchover. The distributed file system supports StatFS APIs.
- Enhanced application framework capabilities for the standard system: The ArkUI-based custom drawing capability and Lottie animation capability are added. The implicit query and multi-HAP installation are added for the bundle management framework. Permission management, notification vibration setting, notification sound setting and query, do-not-disturb (DND) notification, and session notification are added for the Common Event and Notification subsystem.
- Enhanced system application capabilities for the standard system: Text input and landscape-mode layout display for the input method application, SMS application information management, call log and dialer display in the contacts application, and more options in **Settings** are supported.
- Enhanced capabilities for the mini system: The lightweight HiStreamer supports the customizable media pipeline framework. The Linux init process supports hot swap. The OS lightweight kernel and driver startup are optimized. The quick startup capability is supported.
## Version Mapping
**Table 1** Version mapping of software and tools
| Software/Tool| Version| Remarks|
| -------- | -------- | -------- |
| OpenHarmony | 3.1 Beta | NA |
| SDK | Ohos_sdk 3.1 Beta (API Version 8 Beta)| NA |
| Full code base (for mini, small, and standard systems)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/code-v3.1-Beta.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/code-v3.1-Beta.tar.gz.sha256)|
| Hi3516 standard system solution (binary)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_hi3516.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_hi3516.tar.gz.sha256)|
| RK3568 standard system solution (binary)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_rk3568.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/standard_rk3568.tar.gz.sha256)|
| Hi3861 mini system solution (binary)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_pegasus.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_pegasus.tar.gz.sha256)|
| Hi3516 mini system solution - LiteOS (binary)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus.tar.gz.sha256)|
| Hi3516 mini system solution - Linux (binary)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus_linux.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/hispark_taurus_linux.tar.gz.sha256)|
| Standard system SDK package (macOS)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk-mac.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk-mac.tar.gz.sha256)|
| Standard system SDK package (Windows/Linux)| 3.1 Beta | [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk.tar.gz)| [Download](https://repo.huaweicloud.com/harmonyos/os/3.1-Beta/ohos-sdk.tar.gz.sha256)|
This version has the following updates to OpenHarmony 3.0 LTS.
### Feature Updates
**Table 3** New and enhanced features
| Subsystem| Standard System| Mini and Small Systems|
| -------- | -------- | -------- |
| Bundle management framework| - I4MBSE: Provides the home screen bundle management client.<br/>- I4MBSF: Supports cache clearing.<br/>- I4MBSG: Supports installation package information query.<br/>- I4MBSD: Supports multi-HAP installation.<br/>- I4MBSH: Supports signature verification during multi-HAP installation.<br/>- I4MBSC: Supports the **srcPath** field for modules and abilities.| NA |
| Distributed Scheduler subsystem| -I4MBRW: Samgr supports intra-process system ability list control.<br/>-I4MBRV: Samgr supports maintenance of the system service status list.<br/>-I4MBRZ: Samgr supports initialization of the full service list.<br/>-I4MBRY: Samgr supports maintenance of the system process status list.<br/>-I4MBRX: Samgr supports loading a specific system service.| NA |
| DeviceProfile subsystem| -I4NY23: Insertion, deletion, and query of local device profiles.<br/>-I4NY1X: Query of remote device profiles.<br/>-I4NY1T: Subscription to remote profile changes.<br/>-I4NY1W: Cross-device profile synchronization.| NA |
| Account subsystem| -I4MBQW: Application account addition and deletion.<br/>-I4MBQV: Restrictions on the basic information about application accounts.<br/>-I4MBQU: Application account subscription and unsubscription.<br/>-I4MBQT: Application account function setting and content modification.<br/>-I4MBQS: Application account information query.<br/>-I4IT3U: Basic information management for application accounts.| NA |
| Pan-sensor subsystem| -I3NJ96: Acceleration sensor data reporting.<br/>-I3NJ8H: Gyroscope sensor data reporting.<br/>-I3NJ7J: Ambient light sensor data reporting.<br/>-I3NJ76: Magnetic field sensor data reporting.<br/>-I4MBRP: Magnetic declination and dip.<br/>-I4MBRQ: Horizontal intensity and total intensity of the magnetic field.| NA |
| USB subsystem| I410OZ:<br/>- Querying the list of connected USB devices.<br/>- Obtaining the temporary permission to access USB devices.<br/>- Setting USB device configurations and interfaces.<br/>- Data transfer using USB devices.| NA |
| Multi-language Runtime subsystem| - I4MBUK: The default runtime of JS/TS is changed from quickjs to ARK. <br/>- I4MBUJ: The memory reclaim capability of ARK runtime is enhanced. The concurrent marking and concurrent compression algorithms are supported. Some regions can be selected for compression GC, reducing the GC pause time by 30%.| NA |
| Globalization subsystem| - Added globalization features: singular and plural rules, string sorting, phone number processing, calendar and local calendar, weights and measures and formatting, locale representations and attributes, time segment formatting, alphabet retrieval, Unicode character attributes, wrapping and line feed.<br/>- Supports system resources and rawfile resources.| NA |
| DSoftBus subsystem| -I4FZ29: DSoftBus provides the Ext API for transmission. <br/> -I4FZ25: DSoftBus supports network switching.| -I4FZ29: DSoftBus provides the Ext API for transmission. <br/> -I4FZ25: DSoftBus supports network switching.|
| Startup subsystem| NA | -I3XGJH: init basic environment building.<br/>-I3XGKV: System parameter management.<br/>-I3XGLN: init script management.<br/>-I3XGMQ: Basic permission management.<br/>-I3XGN8: Boot image building and loading.<br/>-I3XGKV: uevent management.<br/>-I3XGNM: Burning mode.|
| Media subsystem| NA | -I4BX5Z: HiStreamer supports audio playback and control.<br/>-I4BX8A: HiStreamer supports playback of MP3 and WAV audio files.<br/>-I4BX9E: HiStreamer playback engine framework requirements are met.<br/>-I4DK89: HiStreamer plugin framework requirements are met.<br/>-I4DK8D: HiStreamer performance and DFX requirements are met.|
| Graphics subsystem| New design of the OpenHarmony graphics stack:<br/>Added the background rendering feature to the UI framework.<br/>Supports the access to the background rendering module of RenderService from ArkUI components.| NA |
| Kernel subsystem| Kernel (Linux 5.10): <br/>-I4LUG4: Supports Contiguous Memory Area (CMA) reuse. (Currently, only Hi3516D V300 is supported.)<br/>-I4LX4G: Supports anonymous Virtual Memory Area (VMA) naming. (Currently, only Hi3516D V300 is supported.)| -I3ND6Y: Optimized OS kernel and driver startup performance.|
| Startup subsystem| NA | -I3NTCT: The Linux init process supports hot swap.|
| Distributed Data Management subsystem| NA | -I4H3JJ: Provides distributed objects for small-system devices.|
| Misc Services subsystem| I4MBQE:<br/>Enables applications to read the system time.<br/>Enables applications to read the system time zone.<br/>Provides time change notifications.<br/>Provides time zone change notifications.<br/>Provides minute change notifications.| NA |
| Compilation and Building subsystem| I4K7E3: Provides a unified compilation command as the compilation entry.<br/>-I4KCNB: Supports the unified gn template.| -I4MBQN: Supports a unified compilation entry and uses **build.sh** to compile mini- and small-system devices.<br/>-I4MBQP: Supports a unified compilation process.<br/>-I4MBQR: Supports unified product configuration.|
| File Storage subsystem| -I4MBS2: Provides StatFS JS interfaces for obtaining the total space and free space of a device.| NA |
| Driver subsystem| -I4L3KK: The drive capability of sensor components is enhanced. The sensor sampling rate can be dynamically configured, the three-axis direction can be statically configured, and the ambient light gain can be adjusted. <br/>-I4L3LF: The sensor driver model capability is enhanced to support cross-process service obtaining and invoking of sensor HDIs. <br/>-I4MBTS: Provides more capabilities for HDF input devices and supports data reporting of joystick devices. <br/>-I4MBTR: The default reference implementation of the Display HDI interface for the standard system is provided based on the DRM display architecture, which helps vendors to adapt the HDI. <br/>-I4HPR7: Provides the hcs macro parsing mechanism. During compilation, the hc-gen tool is used to parse the driver parameters into parameters involved in the macro definition. The driver accesses these macro definition parameters through the hcs macro-format interface. <br/>-I4KVJQ: Supports system-level sleep/wakeup of the Linux and LiteOS kernels. <br/>-I4L3ZZF: Supports synchronous/asynchronous power management invoking and provides a synchronous/asynchronous mechanism for HDF device sleep/wakeup management.| -I4L3KK: The drive capability of sensor components is enhanced. The sensor sampling rate can be dynamically configured, the three-axis direction can be statically configured, and the ambient light gain can be adjusted. <br/>Provides more capabilities for HDF input devices (running on Linux) and supports data reporting of joystick devices. <br/>-I4HPR7: Provides the hcs macro parsing mechanism. During compilation, the hc-gen tool is used to parse the driver parameters into parameters involved in the macro definition. The driver accesses these macro definition parameters through the hcs macro-format interface. <br/>-I4KVJQ: Supports system-level sleep/wakeup of the Linux and LiteOS kernels. <br/>-I4L3ZZF: Supports synchronous/asynchronous power management invoking and provides a synchronous/asynchronous mechanism for HDF device sleep/wakeup management.|
| ArkUI| - I4MBUY: Added **target** to the event to obtain the size.<br/>- I4MBUZ: The **\<Swiper>** component supports cache setting.<br/>- I4MBV1: The **\<Image>** component supports synchronous and asynchronous rendering setting.<br/>- I4MBV3: Added the component polymorphic style setting to the style setting feature.<br/>- I4MBV5: Added the pop-up text for menu content extension to the **\<AlphabetIndexer>** component.<br/>- I4MBV6: Added the custom container components to the component customization feature.<br/>- I4MBV7: Added scroll bar style customization.<br/>- I4MBV8: Added switching forbidden for the **\<Swiper>** component.<br/>- I4MBV9: Added tab bar content customization for the **\<Tabs>** component.<br/>- I4MBVA: Added title bar setting for the **\<Navigation>** component.<br/>- I4MBVB: Added toolbar display/hide control for the **\<toolbar>** component.<br/>- I4MBVC: Added content customization for the **\<toolbar>** component.<br/>- I4MBVD: Added the SysCap declaration compilation feature.<br/>- I4MBVE: Added the JSSDK compilation feature.<br/>- I4MBVF: Added the **Config.json** compilation feature.<br/>- I4MBVG: Added the breakpoint debugging feature for single-instance debugging.<br/>- I4MBVH: Added the attach debugging feature for single-instance debugging.<br/>- I4MBVI: Added the declarative paradigm compilation feature to support compilation and verification.<br/>- I4MBVJ: Added the JS module shared compilation feature.<br/>- I4MBVK: Added the HAR reference and compilation feature.<br/>- I4MBVL: Added the HPM reference and compilation feature.<br/>- I4MBVN: Added the vertical display of the slider bar.<br/>- I4MBVO: Added the content customization feature for the **\<popup>** component.<br/>- I4MBVP: Added the drawing capability for the **\<canvas>** component.<br/>- I4MBVQ: Enhanced the capabilities of the **\<canvas>** component.<br/>- I4MBVR: Added the touch target setting.<br/>- I4MBVS: Added the support for Lottie animation.<br/>- I4MBVT: Added the feature for obtaining the component size.<br/>- I4MBVU: Added content customization to the **\<menu>** component.<br/>- I4MBVV: Added the support for the **\<swipe>** gesture.<br/>- I4MBVW: Added the inspector capability for UI preview.<br/>- I4MBVX: Added the non-route file preview feature.<br/>- I4MBVY: Added the NAPI preview feature.<br/>- I4MBVZ: Added the declarative paradigm preview feature with the basic preview supported.<br/>- I4MBW2: Added the declarative paradigm hot loading feature for modification to the existing nodes.<br/>- I4MBW3: Added the declarative paradigm hot loading feature for node addition.<br/>- I4MBW4: Added the declarative paradigm hot loading feature for node deletion.<br/>- I4MBW5: Added the component preview feature and the page component preview.<br/>Added the universal attribute **touchable** to specify whether a component is touchable. <br/>Added the basic component **\<Marquee>**. <br/>Added the basic component **\<Gauge>**. <br/>Added the basic component **\<TextArea>**. <br/>Added the basic component **\<TextInput>**. <br/>Added the basic component **\<Toggle>**. <br/>Added the container component **\<Stepper>**. <br/>Added the container component **\<StepperItem>**. <br/>Added the global UI method **\<ActionSheet>**.| NA |
| DFX subsystem| -I4MBQH: Added the **HiSysEvent** class and provided the query and subscription interfaces.<br/>-I4MBQJ: Provides the tool query or subscription system event.<br/>-I4MBQL: Added the C interface of the **HiAppEvent** class.| NA |
| Application subsystems| -I4MBU1: Added **Settings** data management APIs. <br/>-I4MBU3: Added time setting. <br/>-I4MBU5: Supports sound management. <br/>-I4MBU6: Added **Settings** data management. <br/>-I4MBU7: Added **Settings** default value management.<br/>-I4MBU8: Added differentiated construction of multiple device forms in **Settings**.<br/>-I4MBU9: Added component-based notifications.| NA |
### API Updates
For details, see the following:
_[JS API Differences] (api-change/v3.1-beta/js-apidiff-v3.1-beta.md)_
_[Native API Differences](api-change/v3.1-beta/native-apidiff-v3.1-beta.md)_
For details about the adaptation status, see [SIG-Devboard](https://gitee.com/openharmony/community/blob/master/sig/sig-devboard/sig_devboard.md).
### Samples & Codelabs
#### New Samples
**Table 4** New samples
| Name| Introduction| Programming Language|
| -------- | -------- | -------- |
| [eTS Common Event](https://gitee.com/openharmony/app_samples/tree/master/ability/EtsCommonEvent)| This sample shows how to use **CommonEvent** APIs in Extended TypeScript (eTS) to create subscribers and subscribe to, publish, and unsubscribe from common events.| eTS |
| [Air Quality](https://gitee.com/openharmony/app_samples/tree/master/common/AirQuality)| This sample implements a simple air quality app using JS. The app displays air quality information using line wrapping and historical data in a bar chart.| JS |
| [Distributed Calculator](https://gitee.com/openharmony/app_samples/tree/master/common/DistributeCalc)| This sample implements a simple calculator app using JS distributed features. The calculator can perform simple numerical calculations and start a remote calculator Feature Ability (FA) to perform collaborative calculation.| JS |
| [eTS Notification](https://gitee.com/openharmony/app_samples/tree/master/common/EtsNotification) | This sample shows how to create and delete a slot in eTS, and how to publish and cancel a notification.| eTS |
| [eTS Resource Management](https://gitee.com/openharmony/app_samples/tree/master/common/EtsResourceManager)| This sample shows how to call resource management APIs in eTS to obtain strings and images.| eTS |
| [Kika Keyboard](https://gitee.com/openharmony/app_samples/tree/master/CompleteApps/KikaInput) | This sample shows how to implement a lightweight input method app, Kika Keyboard, that can run on smart devices powered by OpenHarmony.| JS |
| [eTS Distributed Data Management](https://gitee.com/openharmony/app_samples/tree/master/data/eTSKvStore)| This sample shows how to use distributed data management in eTS, including creating a **KvManager** instance and using KvStore data transfer.| eTS |
| [Lightweight Data Storage](https://gitee.com/openharmony/app_samples/tree/master/data/eTSLiteStorage)| Lightweight data storage supports lightweight key-value operations and allows local apps to store a small amount of data. This sample shows how to add offerings to the shopping cart, remove offerings from the shopping cart, and saving the shopping cart. The shopping cart information is retained even when the app is closed. This reflects the lightweight storage feature.| eTS |
| [eTS Process](https://gitee.com/openharmony/app_samples/tree/master/ETSUI/EtsProcess)| This sample shows how to obtain process information and start a child process to run a shell script in eTS. With this sample, you can obtain the running time, obtain and change the working directory of a process, send a signal to a specific process, start or close a child process, and exit the current process.| eTS |
| [eTS Running Lock] (https://gitee.com/openharmony/app_samples/tree/master/ETSUI/eTSRunninglock)| This sample shows how to test the running lock that prevents the system from entering sleep mode. It uses the black and white wallpapers to simulate the screen-off and screen-on states.| eTS |
| [String Codec](https://gitee.com/openharmony/app_samples/tree/master/ETSUI/StringCodec)| This sample shows how to output strings in a specified format and output error codes in text format. It also demonstrates string encoding and decoding.| eTS |
| [JS Audio Playback and Management] (https://gitee.com/openharmony/app_samples/tree/master/media/JsAudioPlayer)| This sample shows how to use the JS-based audio playback feature and set the volume.| JS |
| [JS Video](https://gitee.com/openharmony/app_samples/tree/master/media/JsVideo) | This sample shows how to use the JS UI component **\<video>** to implement video playback. You can play a video clip and pause the playback through the control bar of the **\<video>** component.| JS |
| [Dot Test](https://gitee.com/openharmony/app_samples/tree/master/security/JsDotTest)| This sample illustrates the dot test function, including application dotting and performance dotting.| JS |
| [JS Worker](https://gitee.com/openharmony/app_samples/tree/master/thread/JsWorker) | This sample shows how to start a worker thread in JS and implement the communication between the worker thread and host thread.| JS |
| [canvas Component](https://gitee.com/openharmony/app_samples/tree/master/UI/JsCanvas)| This sample shows how to use the **\<canvas>** component to customize drawings.| JS |
| [JS Dialog](https://gitee.com/openharmony/app_samples/tree/master/UI/JsDialog)| The JS UI component **\<dialog>** allows users to customize the dialog box style and layout. This sample shows how to use a custom dialog box to implement contacts addition and deletion.| JS |
| [JSList Offerings](https://gitee.com/openharmony/app_samples/tree/master/UI/JsList)| This sample shows how to apply **<list\>** component in the offering classification list. In **<listGroup\>**, two **<list-item\>** components are used to display the list in the collapsed and expanded state. After a list is touched, the corresponding list items are displayed.| JS |
| [JS Panel](https://gitee.com/openharmony/app_samples/tree/master/UI/JsPanel) | The JS container component **\<panel>** provides a lightweight, slidable content display panel. The panel attributes such as the triggering mode and display height can be customized. This sample shows how to display the offering details and service guarantee on the panel.| JS |
| [JS svg](https://gitee.com/openharmony/app_samples/tree/master/UI/JsSvg) | This sample shows how to use the JS component **<svg\>** and its child components, including **<rect\>**, **<circle\>**, **<ellipse\>**, **<path\>**, **<line\>**, **<polygon\>**, **<polyline\>**, **<text\>**, **<animate\>**, and **<animateTransform\>**.| JS |
| [Custom JS Components](https://gitee.com/openharmony/app_samples/tree/master/UI/JSUICustomComponent)| Custom components are existing components encapsulated based on service requirements. A custom component can be invoked multiple times in a project to improve the code readability. This sample shows how to use custom JS components, including basic usage, custom events, Props, and event parameters.| JS |
#### New Codelabs
**Table 5** New codelabs
| Name| Introduction| Programming Language|
| -------- | -------- | -------- |
| [Synced Sketchpad (eTS)](https://gitee.com/openharmony/codelabs/tree/master/Distributed/DistributeDatabaseDrawEts)| This codelab shows how to implement synchronous writing and interaction between multiple devices based on the distributed feature.| eTS |
| [Distributed Database](https://gitee.com/openharmony/codelabs/tree/master/Data/JsDistributedData)| This codelab shows how to use the Distributed Data Service APIs to facilitate consistent data access between devices.| JS |
| [Relational Database](https://gitee.com/openharmony/codelabs/tree/master/Data/JSRelationshipData)| This codelab shows how to quickly develop database-related application services based on the relational database and data management capability.| JS |
| [Simplified Declarative UI Paradigm (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/SimpleGalleryEts)| This codelab shows how to implement a gallery app based on OpenHarmony eTS UI components.| eTS |
| [One-Time Development for Multi-device Deployment (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/MultiDeploymentEts)| This codelab shows how to implement one-time layout development for multi-device deployment based on OpenHarmony eTS UI components.| eTS |
| [Shopping (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/ShoppingEts)| This codelab shows how to implement a shopping app based on OpenHarmony eTS UI components.| eTS |
| [Intra- and Inter-page Navigation](https://gitee.com/openharmony/codelabs/tree/master/Ability/PageAbility)| This codelab shows how to switch between pages and within a page.| eTS |
| [Transition Animation (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/TransitionAnimtaionEts)| This codelab shows how to implement page transition, component transition, and transition of shared elements based on OpenHarmony eTS UI components.| eTS |
| [slider Usage (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/SliderApplicationEts)| This codelab shows how to use the OpenHarmony eTS UI component **\<slider>** to implement the animation effect when users adjust the size and speed of the windmill.| eTS |
| [Liquid Layout (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/FlowLayoutEts)| This codelab shows how to implement the liquid layout based on the OpenHarmony eTS UI components.| eTS |
| [Dialog Box (eTS)](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/CustomDialogEts)| This codelab shows how to implement an alert dialog box and custom dialog box based on OpenHarmony eTS UI components.| eTS |
## Resolved Issues
**Table 6** Resolved issues
| Issue No.| Description|
| -------- | -------- |
| [I48IM7](https://gitee.com/openharmony/hiviewdfx_hilog/issues/I48IM7) | During the hilog pressure test, **hilogd** restarts unexpectedly, and the **hilog** command cannot be used.|
| [I48YPH](https://gitee.com/openharmony/security_deviceauth/issues/I48YPH) | [DSoftBus - Networking] During the testing of the getting-offline - discovery - networking cycle, there are 3 failures among all the 110 attempts.|
| [I4BVVW](https://gitee.com/openharmony/communication_dsoftbus/issues/I4BVVW) | [DSoftBus - Networking] The success rate of automatic networking between a standard-system device and mobile phone is 97%.|
| [I4BXY1](https://gitee.com/openharmony/multimedia_camera_standard/issues/I4BXY1) | There is no sound in the first few seconds of a video recording, the sound and image are out of sync, frame freezing occurs, and noises occur when the audio source was far away during recording.|
| [3ZJ1D](https://gitee.com/openharmony/kernel_liteos_a/issues/I3ZJ1D) | There is a possibility that the user mode fails in the XTS pressure test of the permission case.|
## Known Issues
**Table 7** Known issues
| Issue No.| Description| Impact| To Be Resolved On|
| -------- | -------- | -------- | -------- |
| [I4NRS5](https://gitee.com/openharmony/kernel_linux_5.10/issues/I4NRS5) | [Kernel subsystem] A CVE vulnerability exists.| No patch has been released for the Linux kernel. The kernel will be updated after the patch is released in the community.| Depending on the patch release in the community|
| [I4MGJM](https://gitee.com/openharmony/drivers_peripheral/issues/I4MGJM) | [HDF/Camera] The case fails when the RK3568 board runs the camera HDI tests.| The photographing and preview functions are normal. The recording function can be started but cannot be stopped.| 2021/12/31 |
| [I4OECR](https://gitee.com/openharmony/ark_js_runtime/issues/I4OECR) | An Ark stack exception occurs during XTS running (low probability).| There is a low probability that the Ark stack becomes abnormal during the XTS pressure test. This issue occurs only once in 48 hours. The exception stack is reported only in the log and does not affect the functions.| 2022/01/05|
| [I4OBTW](https://gitee.com/openharmony/aafwk_standard/issues/I4OBTW) | After all XTS cases are executed and the application is installed, aa start failures occur, affecting the OpenHarmony pipeline stability test.| During the XTS pressure test, when 100 application packages are installed in batches in a short period of time, 2 of them cannot be started. User experience is not affected.| 2022/01/05|
| [I4OLHF](https://gitee.com/openharmony/ark_js_runtime/issues/I4OLHF?from=project-issue) | [Ark subsystem] The test process is abnormal due to the com.amsst.amsMissionSnapshotTest process.| This issue occurs occasionally during high-pressure tests.| 2022/01/05|
| [I4OLUK](https://gitee.com/openharmony/ark_js_runtime/issues/I4OLUK) | [Ark subsystem] The process stack is abnormal due to the com.ohos.systemui process.| This issue occurs occasionally during high-pressure tests.| 2022/01/05|
#### cl.rpc.1 sendRequest Return Value Type Change
##### Change Impact
The **sendRequest** method in the JS modules **RemoteProxy** and **RemoteObject** is changed to an asynchronous interface. The new version uses a **Promise** object to return a **SendRequestResult** instance. Existing applications need to be adapted.
##### Key API/Component Changes
```
Module: ohos.rpc.IRemoteObject, ohos.rpc.RemoteProxy and ohos.rpc.RemoteObject
This document describes the changes of APIs in OpenHarmony 3.1 Beta when compared with OpenHarmony 3.0 LTS.
## Standard System API Changes
| Module| API| Change Type| Change Description|
| -------- | -------- | -------- | -------- |
| System Application - settings| getUri(name: string): string | Added| Added the API for obtaining the URI of a string.|
| System Application - settings| getValue(dataAbilityHelper: DataAbilityHelper, name: string, defValue: string): string | Added| Added the API for obtaining the value of a string in the database.|
| System Application - settings| setValue(dataAbilityHelper: DataAbilityHelper, name: string, value: string): boolean | Added| Added the API for saving a string name and its value in the database.|
| Misc Services - systemTime| getCurrentTime(callback: AsyncCallback<number>): void | Added| Added the API for obtaining the number of milliseconds elapsed since the Unix epoch.|
| Misc Services - systemTime| getCurrentTime(): Promise<number> | Added| Added the API for obtaining the number of milliseconds elapsed since the Unix epoch.|
| Misc Services - systemTime| getCurrentTimeNs(callback: AsyncCallback<number>): void | Added| Added the API for obtaining the number of nanoseconds elapsed since the Unix epoch.|
| Misc Services - systemTime| getCurrentTimeNs(): Promise<number> | Added| Added the API for obtaining the number of nanoseconds elapsed since the Unix epoch.|
| Misc Services - systemTime| getRealActiveTime(callback: AsyncCallback<number>): void | Added| Added the API for obtaining the number of milliseconds elapsed since the system boot, excluding the deep sleep time.|
| Misc Services - systemTime| getRealActiveTime(): Promise<number> | Added| Added the API for obtaining the number of milliseconds elapsed since the system boot, excluding the deep sleep time.|
| Misc Services - systemTime| getRealActiveTimeNs(callback: AsyncCallback<number>): void | Added| Added the API for obtaining the number of nanoseconds elapsed since the system boot, excluding the deep sleep time.|
| Misc Services - systemTime| getRealActiveTimeNs(): Promise<number> | Added| Added the API for obtaining the number of nanoseconds elapsed since the system boot, excluding the deep sleep time.|
| Misc Services - systemTime| getRealTime(callback: AsyncCallback<number>): void | Added| Added the API for obtaining the number of milliseconds elapsed since the system boot, including the deep sleep time.|
| Misc Services - systemTime| getRealTime(): Promise<number> | Added| Added the API for obtaining the number of milliseconds elapsed since the system boot, including the deep sleep time.|
| Misc Services - systemTime| getRealTimeNs(callback: AsyncCallback<number>): void | Added| Added the API for obtaining the number of nanoseconds elapsed since the system boot, including the deep sleep time.|
| Misc Services - systemTime| getRealTimeNs(): Promise<number> | Added| Added the API for obtaining the number of nanoseconds elapsed since the system boot, including the deep sleep time.|
| Misc Services - systemTime| getDate(callback: AsyncCallback<Date>): void | Added| Added the API for obtaining the system date.|
| Misc Services - systemTime| getDate(): Promise<Date> | Added| Added the API for obtaining the system date.|
| Misc Services - systemTime| getTimeZone(callback: AsyncCallback<string>): void | Added| Added the API for obtaining the system time zone.|
| Misc Services - systemTime| getTimeZone(): Promise<string> | Added| Added the API for obtaining the system time zone.|
| ArkUI Framework - Universal Events| onAreaChange (Component Area Change Event)| Added| Added the API for subscribing to component area (including the size and position) changes.|
| ArkUI Framework - Universal Attributes| responseRegion| Added| Added the attribute for touch hotspot settings.|
| ArkUI Framework - Universal Attributes| touchable| Added| Added the attribute that specifies whether a component is touchable.|
| ArkUI Framework - Universal Attributes| stateStyle| Added| Added the attribute that specifies the styles of the pressed and disabled states of a component.|
| ArkUI Framework - Canvas Components| Lottie | Added| Added the support for the Lottie library.|
| ArkUI Framework - Global UI Methods| ActionSheet | Added| Added the support for the list selection dialog box.|
| USB Service - USB| getDevices(): Array<Readonly<USBDevice>> | Added| Added the API for obtaining USB devices.|
| USB Service - USB| connectDevice(device: USBDevice): Readonly<USBDevicePipe> | Added| Added the API for opening a USB device based on the device information returned by **getDevices()**.|
| USB Service - USB| hasRight(deviceName: string): boolean | Added| Added the API for checking whether the caller has the permission to access the USB device.|
| USB Service - USB| requestRight(deviceName: string): Promise<boolean> | Added| Added the API for requesting the temporary permission for the caller to access the USB device.|
| USB Service - USB| claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number | Added| Added the API for claiming a USB interface.|
| USB Service - USB| releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number | Added| Added the API for releasing a USB interface.|
| USB Service - USB| setConfiguration(pipe: USBDevicePipe, config: USBConfig): number | Added| Added the API for setting USB device configurations.|
| USB Service - USB| setInterface(pipe: USBDevicePipe, iface: USBInterface): number | Added| Added the API for setting USB device interfaces.|
| USB Service - USB| getRawDescriptor(pipe: USBDevicePipe): Uint8Array | Added| Added the API for obtaining the raw USB descriptor.|
| USB Service - USB| getFileDescriptor(pipe: USBDevicePipe): number | Added| Added the API for obtaining the file descriptor.|
| USB Service - USB| controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise<number> | Added| Added the API for control transfer.|
| USB Service - USB| bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise<number> | Added| Added the API for bulk transfer.|
| USB Service - USB| closePipe(pipe: USBDevicePipe): number | Added| Added the API for closing the USB device pipe.|
| Application Framework - bundle| function cleanBundleCacheFiles(bundleName: string, callback: AsyncCallback<void>): void;<br/>function cleanBundleCacheFiles(bundleName: string): Promise<void>; | Added| Added the APIs for clearing the cache of an application.|
| Application Framework - bundle| function setApplicationEnabled(bundleName: string, isEnable: boolean, callback: AsyncCallback<void>): void;<br/>function setApplicationEnabled(bundleName: string, isEnable: boolean): Promise<void>; | Added| Added the API for setting whether to enable an application.|
| Application Framework - bundle| function setAbilityEnabled(info: AbilityInfo, isEnable: boolean, callback: AsyncCallback<void>): void;<br/>function setAbilityEnabled(info: AbilityInfo, isEnable: boolean): Promise<void>; | Added| Added the APIs for setting whether to enable an ability.|
| Application Framework - bundle.innerBundleManager| function getLauncherAbilityInfos(bundleName: string, userId: number, callback: AsyncCallback<Array<LauncherAbilityInfo>>) : void;<br/>function getLauncherAbilityInfos(bundleName: string, userId: number) : Promise<Array<LauncherAbilityInfo>>; | Added| Added the APIs for obtaining the launcher ability information by **bundleName**.|
| Application Framework - bundle.innerBundleManager| function on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback, callback: AsyncCallback<string>) : void;<br/>function on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback): Proimise<string>; | Added| Added the APIs for subscribing to bundle status changes.|
| Application Framework - bundle.innerBundleManager| function off(type:"BundleStatusChange", callback: AsyncCallback<string>) : void;<br/>function off(type:"BundleStatusChange"): Proimise<string>; | Added| Added the APIs for unsubscribing from bundle status changes.|
| Application Framework - bundle.innerBundleManager| function getAllLauncherAbilityInfos(userId: number, callback: AsyncCallback<Array<LauncherAbilityInfo>>) : void;<br/>function getAllLauncherAbilityInfos(userId: number) : Promise<Array<LauncherAbilityInfo>>; | Added| Added the APIs for obtaining the application abilities on all launchers by **userId**.|
| Application Framework - bundle.innerBundleManager| function getShortcutInfos(bundleName :string, callback: AsyncCallback<Array<ShortcutInfo>>) : void;<br/>function getShortcutInfos(bundleName : string) : Promise<Array<ShortcutInfo>>; | Added| Added the APIs for obtaining the application shortcut information by **bundleName**.|
| DSoftBus - rpc.IRemoteObject| PING_TRANSACTION | Deleted| Deleted since it is not implemented in API Version 7. The deletion has no impact on existing applications.|
| DSoftBus - rpc.IRemoteObject| DUMP_TRANSACTION | Deleted| Deleted since it is not implemented in API Version 7. The deletion has no impact on existing applications.|
| DSoftBus - rpc.IRemoteObject| INTERFACE_TRANSACTION | Deleted| Deleted since it is not implemented in API Version 7. The deletion has no impact on existing applications.|
| DSoftBus - rpc.IRemoteObject| MIN_TRANSACTION_ID | Deleted| Deleted since it is not implemented in API Version 7. The deletion has no impact on existing applications.|
| DSoftBus - rpc.IRemoteObject| MAX_TRANSACTION_ID | Deleted| Deleted since it is not implemented in API Version 7. The deletion has no impact on existing applications.|
| DSoftBus - rpc.Sequenceable| hasFileDescriptor(): boolean | Deleted| Deleted since this API will not be invoked by the RPC framework. The deletion has no impact on existing applications.|
| DSoftBus - rpc.MessageOption| MAX_WAIT_TIME = 3000 | Deleted| Deleted since it is not implemented in API Version 7. The deletion has no impact on existing applications.|
| DSoftBus - rpc.RemoteObject| queryLocalInterface(descriptor: string): IRemoteBroker | Modified| Corrected the return type to **IRemoteBroker**. This change does not affect existing applications.|
| DSoftBus - rpc.Proxy| queryLocalInterface(interface: string): IRemoteBroker | Modified| Corrected the return type to **IRemoteBroker**. This change does not affect existing applications.|
| Globalization - Intl| RelativeTimeFormat.format(value: number, unit: string): string; | Added| Added the API for formatting the relative time.|
| Globalization - Intl| RelativeTimeFormat.formatToParts(value: number, unit: string): Array<object>; | Added| Added the API for formatting the relative time. The result is divided into multiple parts and stored separately.|
| Globalization - Intl| RelativeTimeFormat.formatToParts(value: number, unit: string): Array<object>; | Added| Added the API for formatting the relative time. The result is divided into multiple parts and stored separately.|
| Globalization - Intl| PluralRules.constructor(); | Added| Added this constructor.|
| Globalization - Intl| Collator.compare(first: string, second: string): number; | Added| Added the API for comparing two strings.|
| Globalization - Intl| Collator.resolvedOptions(): CollatorOptions; | Added| Added the API for obtaining the attributes of a sorting object.|
| Globalization - I18N| function unitConvert(fromUnit: UnitInfo, toUnit: UnitInfo, value: **number**, locale: **string**, style?: **string**): **string**; | Added| Added the API for unit conversion.|
| Globalization - I18N| function **constructor**(country: **string**, options?: PhoneNumberFormatOptions);<br/>function isValidNumber(**number**: **string**): boolean;<br/>function format(**number**: **string**): **string**; | Added| Added the APIs for formatting phone numbers.|
| Globalization - I18N| **function** isRTL(locale: **string**): boolean; | Added| Added the API for checking whether the localized script for the specified language is displayed from right to left.|
| Globalization - I18N| function getInstance(locale?:**string**): IndexUtil;<br/>function getIndexList(): Array<**string**>; | Added| Added the APIs for obtaining the alphabet index.|
| Event Notification - DoNotDisturbDate| type: notification.DoNotDisturbType | Added| Added the do-not-disturb (DND) time type.|
| Event Notification - DoNotDisturbDate| begin: Date | Added| Added the DND start time setting.|
| Event Notification - DoNotDisturbDate| end: Date | Added| Added the DND end time setting.|
| Event Notification - DoNotDisturbDate| export enum DoNotDisturbType {<br/> TYPE_NONE = 0, // Non-notification DND type<br/> TYPE_ONCE = 1, // One-shot DND at the specified time segment<br/> TYPE_DAILY = 2, // Daily DND at the specified time segment (only the hour and minute specified)<br/> TYPE_CLEARLY = 3, // DND at the specified time segment (the year, month, day, hour, and minute specified)<br/>}| Added| Added the DND time type.|
| Event Notification - notification| function setDoNotDisturbDate(date DoNotDisturbDate, callback: AsyncCallback<void>): void | Added| Added the API for setting the DND time segment.|
| Event Notification - notification| function setDoNotDisturbDate(date DoNotDisturbDate): Promise<void> | Added| Added the API for setting the DND time segment.|
| Event Notification - notification| function getDoNotDisturbDate(callback: AsyncCallback<DoNotDisturbDate>): void | Added| Added the API for obtaining the DND time segment.|
| Event Notification - notification| function getDoNotDisturbDate(): Promise<DoNotDisturbDate> | Added| Added the API for obtaining the DND time segment.|
| Event Notification - notification| function supportDoNotDisturbMode(callback: AsyncCallback<boolean>): void | Added| Added the API for checking whether DND is supported.|
| Event Notification - notification| function supportDoNotDisturbMode(): Promise<boolean> | Added| Added the API for checking whether DND is supported.|
| Event Notification - notification| function cancelGroup(groupName: string, callback: AsyncCallback<void>): void | Added| Added the API for canceling a notification group of the current application.|
| Event Notification - notification| function cancelGroup(groupName: string): Promise<void> | Added| Added the API for canceling a notification group of the current application.|
| Event Notification - notification| function removeGroupByBundle(bundle: BundleOption, groupName: string, callback: AsyncCallback<void>): void | Added| Added the API for removing a notification group of a specified application.|
| Event Notification - notification| function removeGroupByBundle(bundle: BundleOption, groupName: string): Promise<void> | Added| Added the API for removing a notification group of a specified application.|
| Event Notification - NotificationSubscriber| onDoNotDisturbDateChange?:(mode: notification.DoNotDisturbDate) => void | Added| Added the API for subscribing to DND setting changes.|
| Event Notification - NotificationRequest| smallIcon?: image.PixelMap | Added| Added the small notification icon.|
| Event Notification - NotificationRequest| largeIcon?: image.PixelMap; | Added| Added the large notification icon.|
| Event Notification - NotificationRequest| groupName?: string; | Added| Added the notification group name.|
| Event Notification - NotificationUserInput| | Added| Added the user input object.|
| Event Notification - NotificationUserInput| inputKey: string | Added| Added a key to identify the user input.|
| Event Notification - NotificationActionButton| userInput?: NotificationUserInput | Added| Added the user input object.|
| Event notification - emitter| function on(event: InnerEvent, callback: Callback<EventData>): void | Added| Added the API for subscribing to an event in persistent manner and receiving the event callback.|
| Event notification - emitter| function once(event: InnerEvent, callback: Callback<EventData>): void | Added| Added the API for subscribing to an event in one-shot manner and unsubscribing from it after the event is received via a callback.|
| Event notification - emitter| function off(eventId: number): void | Added| Added the API for unsubscribing from an event.|
| Event notification - emitter| function emit(event: InnerEvent, data?: EventData): void | Added| Added the API for emitting an event to the event queue.|
| Distributed File - statfs| function getFreeBytes(path: string, callback: AsyncCallback<number>): void | Added| Added the API for obtaining the free space (in bytes) of a device using an asynchronous callback.|
| Distributed File - statfs| function getFreeBytes(path: string): Promise<number> | Added| Added the API for obtaining the free space (in bytes) of a device using a promise.|
| Distributed File - statfs| function getTotalBytes(path: string, callback: AsyncCallback<number>): void | Added| Added the API for obtaining the total space (in bytes) of a device using an asynchronous callback.|
| Distributed File - statfs| function getTotalBytes(path: string): Promise<number> | Added| Added the API for obtaining the total space (in bytes) of a device using a promise.|
| Account - account.appAccount| createAppAccountManager | Added| Added the API for obtaining an **AppAccountManager** instance.|
| Account - account.appAccount| addAccount(name: string, callback: AsyncCallback<void>): void;<br/>addAccount(name: string, extraInfo: string, callback: AsyncCallback<void>): void;<br/>addAccount(name: string, extraInfo?: string): Promise<void>; | Added| Added the APIs for adding an application account.|
| Account - account.appAccount| deleteAccount(name: string, callback: AsyncCallback<void>): void;<br/>deleteAccount(name: string): Promise<void>; | Added| Added the APIs for deleting an application account.|
| Account - account.appAccount| disableAppAccess(name: string, bundleName: string, callback: AsyncCallback<void>): void;<br/>disableAppAccess(name: string, bundleName: string): Promise<void>; | Added| Added the APIs for disabling an application account from accessing a third-party application with the given bundle name.|
| Account - account.appAccount| enableAppAccess(name: string, bundleName: string, callback: AsyncCallback<void>): void;<br/>enableAppAccess(name: string, bundleName: string): Promise<void>; | Added| Added the APIs for enabling an application account to access a third-party application with the given bundle name.|
| Account - account.appAccount| checkAppAccountSyncEnable(name: string, callback: AsyncCallback<boolean>): void;<br/>checkAppAccountSyncEnable(name: string): Promise<boolean>; | Added| Added the APIs for checking whether an application account allows application data synchronization.|
| Account - account.appAccount| setAccountCredential(name: string, credentialType: string, credential: string,<br/> callback: AsyncCallback<void>): void;<br/>setAccountCredential(name: string, credentialType: string, credential: string): Promise<void>; | Added| Added the APIs for setting a credential for an application account.|
| Account - account.appAccount| setAccountExtraInfo(name: string, extraInfo: string, callback: AsyncCallback<void>): void;<br/>setAccountExtraInfo(name: string, extraInfo: string): Promise<void>; | Added| Added the APIs for setting additional information for an application account.|
| Account - account.appAccount| setAppAccountSyncEnable(name: string, isEnable: boolean, callback: AsyncCallback<void>): void;<br/>setAppAccountSyncEnable(name: string, isEnable: boolean): Promise<void>; | Added| Added the APIs for setting whether to enable application data synchronization for an application account.|
| Account - account.appAccount| setAssociatedData(name: string, key: string, value: string, callback: AsyncCallback<void>): void;<br/>setAssociatedData(name: string, key: string, value: string): Promise<void>; | Added| Added the APIs for setting data to be associated with an application account.|
| Account - account.appAccount| getAllAccessibleAccounts(callback: AsyncCallback<Array<AppAccountInfo>>): void;<br/>getAllAccessibleAccounts(): Promise<Array<AppAccountInfo>>; | Added| Added the APIs for obtaining the account information of this application and the information about the third-party application account that has been authorized to the current application.|
| Account - account.appAccount| getAllAccounts(owner: string, callback: AsyncCallback<Array<AppAccountInfo>>): void;<br/>getAllAccounts(owner: string): Promise<Array<AppAccountInfo>>; | Added| Added the APIs for obtaining all account information of this application.|
| Account - account.appAccount| getAccountCredential(name: string, credentialType: string, callback: AsyncCallback<string>): void;<br/>getAccountCredential(name: string, credentialType: string): Promise<string>; | Added| Added the APIs for obtaining the credential of an application account.|
| Account - account.appAccount| getAccountExtraInfo(name: string, callback: AsyncCallback<string>): void;<br/>getAccountExtraInfo(name: string): Promise<string>; | Added| Added the APIs for obtaining additional information of an application account.|
| Account - account.appAccount| getAssociatedData(name: string, key: string, callback: AsyncCallback<string>): void;<br/>getAssociatedData(name: string, key: string): Promise<string>; | Added| Added the APIs for obtaining data associated with an application account.|
| Account - account.appAccount| on(type: 'change', owners: Array<string>, callback: Callback<Array<AppAccountInfo>>): void; | Added| Added the API for subscribing to application account changes.|
| Account - account.appAccount| off(type: 'change', callback?: Callback<void>): void; | Added| Added the API for unsubscribing from application account changes.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<AccelerometerResponse>,options?: Options): void | Added| Added the API for subscribing to acceleration sensor data changes.|
| Pan-sensor - sensor| on(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback<LinearAccelerometerResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the linear acceleration sensor.|
| Pan-sensor - sensor| on(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback<AccelerometerUncalibratedResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the uncalibrated acceleration sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityResponse>,options?: Options): void | Added| Added the API for subscribing to data changes of the gravity sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<GyroscopeResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the gyroscope sensor.|
| Pan-sensor - sensor| on(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback<GyroscopeUncalibratedResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the uncalibrated gyroscope sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, callback: AsyncCallback<SignificantMotionResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the significant motion sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback<PedometerDetectResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the pedometer detection sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<PedometerResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the pedometer sensor.|
| Pan-sensor - sensor| on(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback<AmbientTemperatureResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the ambient temperature sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<MagneticFieldResponse>,options?: Options): void | Added| Added the API for subscribing to data changes of the magnetic field sensor.|
| Pan-sensor - sensor| on(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback<MagneticFieldUncalibratedResponse>, options: Options): void | Added| Added the API for subscribing to data changes of the uncalibrated magnetic field sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<ProximityResponse>,options?: Options): void | Added| Added the API for subscribing to proximity sensor data changes.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<HumidityResponse>,options?: Options): void | Added| Added the API for subscribing to humidity sensor data changes.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<BarometerResponse>,options?: Options): void | Added| Added the API for subscribing to barometer sensor data changes.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the Hall effect sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<LightResponse>, options?: Options): void | Added| Added the API for subscribing to data changes of the ambient light sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<OrientationResponse>, options?: Options): void | Added| Added the API for subscribing to orientation sensor data changes.|
| Pan-sensor - sensor| on(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback<RotationVectorResponse>,options?: Options): void | Added| Added the API for subscribing to data changes of the rotation vector sensor.|
| Pan-sensor - sensor| on(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<WearDetectionResponse>,options?: Options): void | Added| Added the API for subscribing to wear detection data changes.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_ACCELEROMETER, callback: AsyncCallback<AccelerometerResponse>): void | Added| Added the API for subscribing to only one data change of the acceleration sensor.|
| Pan-sensor - sensor| once(type:SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION,callback:AsyncCallback<LinearAccelerometerResponse>): void | Added| Added the API for subscribing to only one data change of the linear acceleration sensor.|
| Pan-sensor - sensor| once(type:SensorType.SENSOR_TYPE_ID_ACCELEROMETER_UNCALIBRATED,callback:AsyncCallback<AccelerometerUncalibratedResponse>): void | Added| Added the API for subscribing to only one data change of the uncalibrated acceleration sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_GRAVITY, callback: AsyncCallback<GravityResponse>): void | Added| Added the API for subscribing to only one data change of the gravity sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_GYROSCOPE, callback: AsyncCallback<GyroscopeResponse>): void | Added| Added the API for subscribing to only one data change of the gyroscope sensor.|
| Pan-sensor - sensor| once(type:SensorType.SENSOR_TYPE_ID_GYROSCOPE_UNCALIBRATED,callback:AsyncCallback<GyroscopeUncalibratedResponse>, options?: Options): void | Added| Added the API for subscribing to only one data change of the uncalibrated gyroscope sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_SIGNIFICANT_MOTION, callback: AsyncCallback<SignificantMotionResponse>): void | Added| Added the API for subscribing to only one data change of the significant motion sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_PEDOMETER_DETECTION, callback: AsyncCallback<PedometerDetectResponse>): void | Added| Added the API for subscribing to only one data change of the pedometer detection sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback: AsyncCallback<PedometerResponse>): void | Added| Added the API for subscribing to only one data change of the pedometer sensor.|
| Pan-sensor - sensor| once(type:SensorType.SENSOR_TYPE_ID_AMBIENT_TEMPERATURE,callback:AsyncCallback<AmbientTemperatureResponse>): void | Added| Added the API for subscribing to only one data change of the ambient temperature sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD, callback: AsyncCallback<MagneticFieldResponse>): void | Added| Added the API for subscribing to only one data change of the magnetic field sensor.|
| Pan-sensor - sensor| once(type:SensorType.SENSOR_TYPE_ID_MAGNETIC_FIELD_UNCALIBRATED,callback:AsyncCallback<MagneticFieldUncalibratedResponse>): void | Added| Added the API for subscribing to only one data change of the uncalibrated magnetic field sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: AsyncCallback<ProximityResponse>): void | Added| Added the API for subscribing to only one data change of the proximity sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback: AsyncCallback<HumidityResponse>): void | Added| Added the API for subscribing to only one data change of the humidity sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_BAROMETER, callback: AsyncCallback<BarometerResponse>): void | Added| Added the API for subscribing to only one data change of the barometer sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_HALL, callback: AsyncCallback<HallResponse>): void | Added| Added the API for subscribing to only one data change of the Hall effect sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_AMBIENT_LIGHT, callback: AsyncCallback<LightResponse>): void | Added| Added the API for subscribing to only one data change of the ambient light sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_ORIENTATION, callback: AsyncCallback<OrientationResponse>): void | Added| Added the API for subscribing to only one data change of the orientation sensor.|
| Pan-sensor - sensor| once(type:SensorType.SENSOR_TYPE_ID_ROTATION_VECTOR,callback:AsyncCallback<RotationVectorResponse>): void | Added| Added the API for subscribing to only one data change of the rotation vector sensor.|
| Pan-sensor - sensor| once(type: SensorType.SENSOR_TYPE_ID_WEAR_DETECTION, callback: AsyncCallback<WearDetectionResponse>): void | Added| Added the API for subscribing to only one data change of the wear detection sensor.|
| Pan-sensor - sensor| off(type: SensorType, callback?: AsyncCallback<void>): void | Added| Added the API for unsubscribing from sensor data changes.|
| Pan-sensor - sensor| getGeomagneticField(locationOptions: LocationOptions, timeMillis: number, callback: AsyncCallback<GeomagneticResponse>): void </br> getGeomagneticField(locationOptions: LocationOptions, timeMillis: number): Promise<GeomagneticResponse> | Added| Added the APIs for obtaining the geomagnetic field of a geographic location.|
| Pan-sensor - vibrator| vibrate(duration: number): Promise<void></br> vibrate(duration: number, callback?: AsyncCallback<void>): void | Added| Added the APIs for triggering vibration with a specific duration.|
| Pan-sensor - vibrator| vibrate(effectId: EffectId): Promise<void></br> vibrate(effectId: EffectId, callback?: AsyncCallback<void>): void | Added| Added the APIs for triggering vibration with a specific effect.|
| Pan-sensor - vibrator| stop(stopMode: VibratorStopMode): Promise<void></br> stop(stopMode: VibratorStopMode, callback?: AsyncCallback<void>): void | Added| Added the APIs for stopping vibration.|
| bundle | napi_value ClearBundleCache(napi_env env, napi_callback_info info) | Added| Added the API for clearing the cache of an application.|
| bundle | napi_value SetApplicationEnabled(napi_env env, napi_callback_info info) | Added| Added the API for setting whether to enable an application.|
| bundle | napi_value SetAbilityEnabled(napi_env env, napi_callback_info info) | Added| Added the API for setting whether to enable an ability.|
| innerbundlemanager | napi_value JSGetLauncherAbilityInfos(napi_env env, napi_callback_info info) | Added| Added the API for obtaining the launcher ability information by **bundleName**.|
| innerbundlemanager | napi_value JSLauncherServiceOn(napi_env env, napi_callback_info info) | Added| Added the API for subscribing to bundle status changes.|
| innerbundlemanager | napi_value JSLauncherServiceOff(napi_env env, napi_callback_info info) | Added| Added the API for unsubscribing from bundle status changes.|
| innerbundlemanager | napi_value JSGetAllLauncherAbilityInfos(napi_env env, napi_callback_info info) | Added| Added the API for obtaining the application abilities on all launchers by **userId**.|
| innerbundlemanager | napi_value JSGetShortcutInfos(napi_env env, napi_callback_info info) | Added| Added the API for obtaining the application shortcut information by **bundleName**.|