From ab16e98b0626c5dcd51c0994186984db17a7d72a Mon Sep 17 00:00:00 2001 From: Gloria Date: Thu, 18 May 2023 16:32:57 +0800 Subject: [PATCH] Update docs against 17559+17536 Signed-off-by: wusongqing --- en/application-dev/faqs/Readme-EN.md | 17 +- en/application-dev/faqs/faqs-ability.md | 376 ++++++++++++------ .../faqs/faqs-bundle-management.md | 126 ++++++ en/application-dev/faqs/faqs-bundle.md | 31 -- .../faqs/faqs-distributed-device-profile.md | 9 + en/application-dev/faqs/faqs-graphics.md | 146 +++---- en/application-dev/faqs/faqs-multimedia.md | 135 +++++++ en/application-dev/faqs/faqs-sensor.md | 7 + .../faqs/faqs-third-fourth-party-library.md | 115 +++--- .../faqs/faqs-window-manager.md | 64 +++ en/application-dev/website.md | 16 +- 11 files changed, 753 insertions(+), 289 deletions(-) create mode 100644 en/application-dev/faqs/faqs-bundle-management.md delete mode 100644 en/application-dev/faqs/faqs-bundle.md create mode 100644 en/application-dev/faqs/faqs-distributed-device-profile.md create mode 100644 en/application-dev/faqs/faqs-multimedia.md create mode 100644 en/application-dev/faqs/faqs-sensor.md create mode 100644 en/application-dev/faqs/faqs-window-manager.md diff --git a/en/application-dev/faqs/Readme-EN.md b/en/application-dev/faqs/Readme-EN.md index f8beb57887..b9bde5d6eb 100644 --- a/en/application-dev/faqs/Readme-EN.md +++ b/en/application-dev/faqs/Readme-EN.md @@ -1,14 +1,19 @@ # FAQs -- [Ability Framework Development](faqs-ability.md) -- [Resource Management Development](faqs-globalization.md) +- [Ability Development](faqs-ability.md) +- [Bundle Management Development](faqs-bundle-management.md) +- [Resource Manager Development](faqs-globalization.md) - [Common Event and Notification Development](faqs-event-notification.md) -- [Graphics and Image Development](faqs-graphics.md) -- [Data Management Development](faqs-distributed-data-management.md) +- [Graphics Development](faqs-graphics.md) +- [Window Management Development](faqs-window-manager.md) +- [Multimedia Development](faqs-multimedia.md) - [Basic Security Capability Development](faqs-security.md) -- [Application Access Control Development](faqs-ability-access-control.md) +- [Ability Access Control Development](faqs-ability-access-control.md) +- [Data Management Development](faqs-distributed-data-management.md) - [File Management Development](faqs-file-management.md) - [Network Management Development](faqs-network-management.md) - [DFX Development](faqs-dfx.md) +- [Pan-Sensor Development](faqs-sensor.md) - [Startup Development](faqs-startup.md) -- [Usage of Third- and Fourth-Party Libraries](faqs-third-fourth-party-library.md) \ No newline at end of file +- [Distributed Device Development](faqs-distributed-device-profile.md) +- [Usage of Third- and Fourth-Party Libraries](faqs-third-fourth-party-library.md) diff --git a/en/application-dev/faqs/faqs-ability.md b/en/application-dev/faqs/faqs-ability.md index aab3ecc19a..b6901e40e6 100644 --- a/en/application-dev/faqs/faqs-ability.md +++ b/en/application-dev/faqs/faqs-ability.md @@ -1,68 +1,124 @@ -# Ability Framework Development +# Ability Development -## Is a guide similar to the Data ability development in the FA model available for the stage model? +## How do I obtain a notification when the device orientation changes? -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -A guide is available for the **DataShareExtensionAbility** class, which provides APIs for sharing data with other applications and managing the data, in the stage model. +**Solution** -Reference: [DataShare Development](../database/database-datashare-guidelines.md) +Use the **UIAbility.onConfigurationUpdate\(\)** callback to subscribe to system environment variable changes (including the language, color mode, and screen orientation). -## What should I do if the UI does not respond when an ability is started? +**Reference** -Applicable to: OpenHarmony SDK 3.2.5.3, stage model of API version 9 +[Subscribing to System Environment Variable Changes](../application-models/subscribe-system-environment-variable-changes.md#using-uiability-for-subscription) -1. If the ability is started using **startAbility**, check whether the **abilityName** field in **want** uses the bundle name as the prefix. If yes, delete the bundle name. +## How do I redirect a user to a specified page after they touch a service widget? -2. Make sure the ability's home page file configured by **onWindowStageCreate** in the **MainAbility.ts** file is defined in the **main_pages.json** file. +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -3. You are advised to use the SDK and OpenHarmony SDK versions released on the same day. +**Solution** -Reference: [Release Testing Version](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md) +Configure a widget event with the redirected-to UIAbility specified, and call **loadContent** in the **onWindowStageCreate\(\)** callback of the target UIAbility to redirect to the specified page. -## How do I set the UI of an ability to transparent? +**Reference** -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 +[Developing Widget Events](../application-models/arkts-ui-widget-configuration.md) -Set the background color of the top container component to transparent, and then set the **opacity** attribute of the XComponent to **0.01**. +## How do I create a background service in the stage model? -Example: +Applicable to: OpenHarmony 3.2 Beta5 -``` -build() { - Stack() { - XComponent({ - id: 'componentId', - type: 'surface', - }) - .width('100%') - .height('100%') - .opacity(0.01) - // Page content - } - .width('100%') - .height('100%') - .backgroundColor('rgba(255,255,255, 0)') -} -``` +**Symptom** + +**ServiceExtensionAbility** in the stage model is a system API. Therefore, third-party applications cannot use it to create a background service. + +**Solution** + +Create a background task to provide the background service. + +**Reference** + +[Background Task](../task-management/background-task-overview.md) + +## Can I create a UIAbility and specify the process to run the UIAbility in the FA and Stage models? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Yes. + +- FA model + + The FA model supports multiple processes. By default, all components of an application run in the same process. This default scenario is suitable for most applications. To run a specific component in an independent process, configure the **process** tag under **ability** in the configuration file. Note that this tag is available only for system applications. + +- Stage model + + The stage model supports multiple processes. The process model is defined by the system, and third-party applications cannot be configured with multiple processes. To customize an independent process, you must request special permissions, and then specify the **process** tag under **module** in the configuration file. This tag specifies the process in which all the abilities in an HAP run. If this tag is not set, the bundle name is used as the process name by default. + + +## What are the differences between the stage model and the FA model in intra-process object sharing? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +- In the stage model, multiple application components share the same ArkTS engine instance. Therefore, they can easily share objects and state with each other. This also reduces the memory usage of complex applications. +- In the FA model, each application component exclusively uses an ArkTS engine instance. Therefore, you are advised to use the stage model when developing complex applications in distributed scenarios. + +**Reference** + +[Data Synchronization Between UIAbility and UI](../application-models/uiability-data-sync-with-ui.md) + +## How do I use the lifecycle functions of AbilityStage? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Add the field **"srcEntry": "./ets/myabilitystage/MyAbilityStage.ts"** under **module** in the **module.json5** file. + +**Reference** + +[AbilityStage Component Container](../application-models/abilitystage.md) + + +## How do I delete the mission snapshot in Recents after terminateself is called in the multiton scenario? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +You can set **removeMissionAfterTerminate** to **true** in the **module.json5** file. + +## Why can't I start a UIAbility instance by using startAbility\(\)? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +- If the UIAbility is started using **startAbility**, check whether the **abilityName** field in **want** uses the bundle name as the prefix. If yes, delete the bundle name. +- Make sure the UIAbility's home page file configured by **onWindowStageCreate** in the **MainAbility.ts** file is defined in the **main\_pages.json** file. You are advised to use the SDK and OpenHarmony SDK versions released on the same day. ## How do I prevent "this" in a method from changing to "undefined" when the method is called? -Applicable to: OpenHarmony SDK 3.2.5.3, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** -Method 1: Add **.bind(this)** when calling the method. +Method 1: Add **.bind\(this\)** when calling the method. Method 2: Use the arrow function. -## What should I do when the message "must have required property 'startWindowIcon'" is displayed? +## What should I do when the error message "must have required property 'startWindowIcon'" is displayed during the UIAbility startup? -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -Configure the **startWindowIcon** attribute under **abilities** in the **module.json5** file. +**Solution** -Reference: [Application Package Structure (Stage Model)](../quick-start/module-configuration-file.md) +Configure the **startWindowIcon** attribute under **abilities** in the **module.json5** file. -Example: +**Example** ``` { @@ -77,138 +133,226 @@ Example: } ``` -## How do I obtain a notification when the device orientation changes? - -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 +**Reference** -Implement the **onConfigurationUpdated** callback in the **Ability** class. The callback is triggered when the system language, color mode, or display parameters (such as the orientation and density) change. +[module.json5 Configuration File](../quick-start/module-configuration-file.md) ## Can I obtain the context through globalThis in the stage model? -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +Do not use **globalThis** to obtain the context in the stage model. + +This is because all the processes of an application share a JS VM instance in the stage model. Multiple abilities can run on these processes and share the same global object. If **globalThis** is used, the context of different abilities of the same JS VM instance may be returned. + +**Reference** + +[Data Synchronization Between UIAbility and UI](../application-models/uiability-data-sync-with-ui.md) -Do not use **globalThis** to obtain the context in the stage model. This is because all the processes of an application share a JS VM instance in the stage model. Multiple abilities can run on these processes and share the same global object. If **globalThis** is used, the context of different abilities of the same JS VM instance may be returned. +## What should I do when an error indicating too large size is reported during HAP deployment? -Reference of the recommended operation: [Context (Stage Model)](../application-models/application-context-stage.md) +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -## How do I obtain the HAP installation path of application B from application A? +**Symptom** -Applicable to: OpenHarmony SDK 3.0 or later, stage model of API version 9 +During HAP deployment, the following error message is displayed: -First, request the system permission. For details, see [Having Your App Automatically Signed](https://developer.harmonyos.com/en/docs/documentation/doc-guides/ohos-auto-configuring-signature-information-0000001271659465). Then, import the **bundle** module, and call **bundle.getApplicationInfo()** to obtain application information based on the bundle name. Finally, use **application.moduleSourceDirs** to obtain the application storage path. +Failure\[INSTALL\_FAILED\_SIZE\_TOO\_LARGE\] error while deploying hap? + +**Solution** + +You can split the HAP into multiple HAPs. ## How is data returned when startAbilityForResult is called? -Applicable to: OpenHarmony SDK3.0, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -The callee uses **AbilityContext.terminateSelfWithResult** to destroy its ability and pass parameters to **startAbilityForResult**. For details, see [AbilityContext](../reference/apis/js-apis-ability-context.md#abilitycontextterminateselfwithresult). +**Solution** -## Can the lifecycle callback of a released FA widget be triggered when the widget is displayed in the service center so that the user login information can be obtained without opening the FA application? +The target UIAbilities uses **AbilityContext.terminateSelfWithResult** to terminate itselef and pass the result to **startAbilityForResult**. -Applicable to: OpenHarmony SDK 3.2.5.5, FA model of API version 8 +**Reference** -After a widget is added, the **oncreate()** lifecycle is triggered so that related user information (silent login) can be displayed even when the application is not started. However, users must manually add the widget after the application is installed. +[Starting UIAbility in the Same Application and Obtaining the Return Result](../application-models/uiability-intra-device-interaction.md) -## How do I obtain the context? -Applicable to: OpenHarmony SDK 3.2.7.5, stage model of API version 9 +## How do I obtain the system timestamp? -You can use **this.context** to obtain the context in the **MainAbility.ts** file or call **getContext(this)** to obtain the context on the component page. +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -## What should I do when undefined is displayed for the calling of **abilityAccessCtrl.grantUserGrantedPermission** during API version 8 syntax verification? +**Solution** -Applicable to: OpenHarmony SDK 3.0, FA model of API version 8 +Use **getCurrentTime** of **@ohos.systemDateTime** to obtain the system time and time zone. -**abilityAccessCtrl.grantUserGrantedPermission** is a system API. It is not available in the public SDK, which is provided as default on DevEco Studio. To use system APIs, switch to the full SDK. For details, see [Guide to Switching to Full SDK](../quick-start/full-sdk-switch-guide.md). +**Example** -## Which of the following Extension abilities are available in the public SDK: ServiceExtensionAbility, FormExtensionAbility, and DataShareExtensionAbility? +Use the **@ohos.systemDateTime** API as follows: -Applicable to: OpenHarmony SDK 3.2.5.6, stage model of API version 9 + ``` + try { + systemDateTime.getCurrentTime(true, (error, time) => { + if (error) { + console.info(`Failed to get currentTime. message: ${error.message}, code: ${error.code}`); + return; + } + console.info(`Succeeded in getting currentTime : ${time}`); + }); + } catch(e) { + console.info(`Failed to get currentTime. message: ${e.message}, code: ${e.code}`); + } + ``` -Among the aforementioned Extension abilities, only **FormExtensionAbility** is available in the public SDK. **ServiceExtensionAbility** and **DataShareExtensionAbility** are system APIs and available only in the full SDK. -Public SDK: intended for application developers and does not contain system APIs that require system permissions. +**Reference** -Full SDK: intended for original equipment manufacturers (OEMs) and contains system APIs that require system permissions. +[System time and time zone] (../reference/apis/js-apis-system-date-time.md#systemdatetimegetcurrenttime) -## Why can't I play GIF images cyclically on the widget? +## How do I obtain the cache directory of the current application? -Applicable to: OpenHarmony SDK 3.2.5.6, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -The system does not support the display of GIF images on the widget. +**Solution** -## How do I implement service login by touching a widget? +Use **Context.cacheDir** to obtain the cache directory of the application. -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 +**Reference** -You can start an ability upon the touch and implement service login in the ability. +[Obtaining the Application Development Path](../application-models/application-context-stage.md#obtaining-the-application-development-path) -## How do I redirect to the application details page in Settings? +## In which JS file is the service widget lifecycle callback invoked? -Applicable to: OpenHarmony SDK 3.2.6.5 +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -Refer to the following code: +**Solution** -``` -this.context.startAbility( -{ - action: "action.settings.app.info", - parameters: { "settingsParamBundleName": "your app bundlename" } -}) -``` +When a widget is created, a **FormAblity.ts** file is generated, which contains the widget lifecycle. -## How do I listen for screen rotation events? +**Reference** -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 +[FormExtensionAbility](../reference/apis/js-apis-app-form-formExtensionAbility.md) -Refer to the following code: +## What should I do when the compilation on DevEco Studio fails while ServiceExtensionAbility and DataShareExtensionAbility APIs are used? -``` -let listener = mediaquery.matchMediaSync('(orientation: landscape)') -onPortrait(mediaQueryResult) { -if (mediaQueryResult.matches) { -// Do something here. - } else { -// Do something here. - } -} -listener.on('change', onPortrait) -``` +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Symptom** + +After the **ServiceExtensionAbility** and **DataShareExtensionAbility** APIs are used, DevEco Studio reports an error indicating that the compilation fails. + +**Cause** + +The following types of SDKs are provided: + +- Public SDK: intended for application developers and does not contain system APIs that require system permissions. +- Full SDK: intended for original equipment manufacturers (OEMs) and contains system APIs that require system permissions. + +The SDK downloaded using DevEco Studio is the public SDK. + +**Solution** + +Third-party application cannot use **ServiceExtensionAbility** and **DataShareExtensionAbility**. To develop a system application, first [download the full SDK](../quick-start/full-sdk-switch-guide.md). + +## How do I obtain the temp and files paths at the application level? + +Applicable to: OpenHarmony 3.2 Beta5 + +**Solution** + +Obtain them from the application context. Specifically, use **this.context.getApplicationContext.tempDir** i to obtain the **temp** path, and use **this.context.getApplicationContext.filesDir** to obtain the **files** path. + +**Reference** + +[Obtaining the Application Development Path](../application-models/application-context-stage.md#obtaining-the-application-development-path) + + +## Can the lifecycle callback of a released FA widget be triggered when the widget is displayed in the service center so that the user login information can be obtained without opening the FA application? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) -## How do I control the shadow background size during checkbox selection? +**Solution** -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 +After a widget is added, the **onCreate()** lifecycle is triggered so that related user information (silent login) can be displayed even when the application is not started. However, users must manually add the widget after the application is installed. -Set the **padding** attribute of the **\** component to control the shadow size. +## How do I implement service login by touching a widget? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +To create a service widget in the FA model, perform the following steps: + +1. Implement lifecycle callbacks for the widget. + +2. Configure the widget configuration file. + +3. Persistently store widget data. -## How do I set the widget background to transparent? +4. Update widget data. -Applicable to: OpenHarmony SDK 3.2.5.5 +5. Develop the widget UI page. -1. Create the **widget/resources/styles/default.json** file in the root directory of the widget. +6. Develop a widget event. You can start a UIAbility upon the touch and implement service login in the UIAbility. -2. Add the following code to the **default.json** file: +**Reference** + +[Widget Development in the FA Model](../application-models/widget-development-fa.md) + +## How do I redirect to the application details page in Settings? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Refer to the following code: ``` -{ - "style": { - "app_background": "#00000000" - } -} +this.context.startAbility( +{ + action: "action.settings.app.info", + parameters: { "settingsParamBundleName": "your app bundlename" } +}) ``` -## How do I pass parameters for FA widgets? - -Applicable to: OpenHarmony SDK 3.2.5.5 +## How do I get UIAbilityContext within the @Component component in the stage model? -Use **featureAbility.getWant()** and **featureAbility.getContext()** to send data through **router** in the JSON file and use **featureAbility** to receive data in the JS file. +Applicable to: OpenHarmony 3.2 Beta5 (API version 9) -## How do I trigger router.disableAlertBeforeBackPage and router.enableAlertBeforeBackPage? +**Solution** -Applicable to: OpenHarmony SDK 3.2.5.5 +You can use **UIAbility.Context** to obtain the context. -The following conditions must be met: +**Example** -1. Before the redirection to the previous page, a confirm dialog box will be displayed. Note that **router.disableAlertBeforeBackPage** is used to disable the display of a confirm dialog box before returning to the previous page (default), and **router.enableAlertBeforeBackPage** is used to enable the display. +``` +import UIAbility from '@ohos.app.ability.UIAbility'; + +let UIAbilityContext = UIAbility.context; +let ApplicationContext = UIAbility.context.getApplicationContext(); +@Entry +@Component +struct AbilityContextTest { + // abilityContext + @State UIabilityInfo: string = 'Obtaining abilityInfo' + UIabilityContext: UIAbilityContext + + aboutToAppear() { + // Use getContext to obtain the context and convert it to abilityContext. + this.UIabilityContext = getContext(this) as UIAbilityContext + } -2. The system return key is used. + build() { + Row() { + Column({ space: 20 }) { + Text(this.abilityInfo) + .fontSize(20) + .onClick(()=>{ + this.UIabilityInfo = JSON.stringify(this.UIabilityContext.UIabilityInfo) + console.log(`ContextDemo abilityInfo= ${this.UIabilityInfo}`) + }) + } + .width('100%') + } + .height('100%') + } +} +``` diff --git a/en/application-dev/faqs/faqs-bundle-management.md b/en/application-dev/faqs/faqs-bundle-management.md new file mode 100644 index 0000000000..71b1e01ffc --- /dev/null +++ b/en/application-dev/faqs/faqs-bundle-management.md @@ -0,0 +1,126 @@ +# Bundle Management Development + +## How do I determine whether an application is a system application? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Use **bundleManager.getApplicationInfo** (available only for system applications) to obtain application information, and check the value of **systemApp** in the information. The application is a system application if the value is **true**. + +**Reference** + +[bundleManager](../reference/apis/js-apis-bundleManager.md) + +## How do I obtain the version code and version name of an application? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Use **bundleManager.getBundleInfoForSelf\(\)** to obtain the bundle information, which contains the version code (specified by **BundleInfo.versionCode**) and version name (specified by **BundleInfo.versionName**) . + +**Example** + +``` +import bundleManager from '@ohos.bundle.bundleManager'; +import hilog from '@ohos.hilog'; +let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT; +try { + bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => { + const versionCode = data.versionCode; + const versionName = data.versionName; + hilog.info(0x0000, 'testTag', `successfully. versionCode: ${versionCode}, versionName: ${versionName}`); + }).catch(err => { + hilog.error(0x0000, 'testTag', 'failed. Cause: %{public}s', err.message); + }); +} catch (err) { + hilog.error(0x0000, 'testTag', 'failed: %{public}s', err.message); +} +``` + +**Reference** + +[getBundleInfoForSelf](../reference/apis/js-apis-bundleManager.md#bundlemanagergetbundleinfoforself) + +## How do I obtain the bundle name of the current application? + +Applicable to: OpenHarmony 3.2 Beta5 (API version 9) + +**Solution** + +Obtain the bundle name from **UIAbilityContext.abilityInfo.bundleName**. + +**Example** + +``` +import common from '@ohos.app.ability.common'; +const context = getContext(this) as common.UIAbilityContext +console.log(`bundleName: ${context.abilityInfo.bundleName}`) +``` + +**Reference** + +[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontext) and [AbilityInfo](../reference/apis/js-apis-bundleManager-abilityInfo.md#abilityinfo) + +## How do I obtain the application version number, version name, and screen resolution? + +Applicable to: OpenHarmony 3.2 Beta5 + +**Solution** + +1. Obtain the bundle information from the **@ohos.bundle.bundleManager** module. + + The bundle information contains the application version number and version name. + + ``` + import bundleManager from '@ohos.bundle.bundleManager'; + ... + bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{ + let versionName = bundleInfo.versionName; // Application version name. + let versionNo = bundleInfo.versionCode; // Application version number. + }).catch((error)=>{ + console.error("get bundleInfo failed,error is "+error) + }) + ``` + +2. Obtain **screenDensity** from the **@ohos.app.ability.Configuration** module. **screenDensity** contains the screen resolution information. + + ``` + import common from '@ohos.app.ability.common'; + ... + let context = getContext(this) as common.UIAbilityContext; + let screenDensity = context.config.screenDensity; + ``` + + +## How do I obtain the source file path of the current application? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +- Method 1: Use the application context to obtain the source file path. + + ``` + this.uiAbilityContext.abilityInfo.applicationInfo.codePath + ``` + +- Method 2: Use **@ohos.bundle.bundleManager** to obtain the source file path. + + 1. Import the **@ohos.bundle.bundleManager** module and use **bundleManager.getBundleInfoForSelf\(\)** to obtain the bundle information. + 2. Obtain the source file path from **bundleInfo.appInfo.codePath**. + + ``` + import bundleManager from '@ohos.bundle.bundleManager'; + bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{ + this.sourcePath = bundleInfo.appInfo.codePath; + }) + ``` + + +## Can I obtain the HAP information of other applications from the current application? + +Applicable to: OpenHarmony 3.2 Beta (API version 9) + +According to the OpenHarmony security design specifications, the SDK does not provide APIs for third-party applications to obtain bundle information (including but not limited to the application name and version number) of other applications. diff --git a/en/application-dev/faqs/faqs-bundle.md b/en/application-dev/faqs/faqs-bundle.md deleted file mode 100644 index fda41c42bc..0000000000 --- a/en/application-dev/faqs/faqs-bundle.md +++ /dev/null @@ -1,31 +0,0 @@ -# Bundle Management Development - -## How do I obtain the version code and version name of an application? - -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 - -Use **bundle.getBundleInfo()** to obtain the bundle information, which contains the version code and version name. - -Reference: [Bundle](../reference/apis/js-apis-Bundle.md#bundlegetbundleinfo) - -## How do I obtain the bundle name of an application? - -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 - -Obtain the bundle name through **context.abilityInfo.bundleName**. - -Reference: [AbilityInfo](../reference/apis/js-apis-bundle-AbilityInfo.md) - -## How do I obtain an application icon? - -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 - -Use **bundle.getAbilityIcon** to obtain the application icon. To use this API, you must configure the permission **ohos.permission.GET_BUNDLE_INFO**. - -Reference: [Bundle](../reference/apis/js-apis-Bundle.md#bundlegetbundleinfo) - -## How do I determine whether an application is a system application? - -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 - -Use **bundle.getApplicationInfo** to obtain the application information, and then check the value of **systemApp** in the information. The application is a system application if the value is **true**. diff --git a/en/application-dev/faqs/faqs-distributed-device-profile.md b/en/application-dev/faqs/faqs-distributed-device-profile.md new file mode 100644 index 0000000000..8473e3d4bf --- /dev/null +++ b/en/application-dev/faqs/faqs-distributed-device-profile.md @@ -0,0 +1,9 @@ +# Distributed Device Development + +## How do I view the IMEI of an OpenHarmony device? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Obtain the device IMEI from the **HUKS\_TAG\_ATTESTATION\_ID\_IMEI** parameter of the **HuksTag** API. [Reference](../reference/apis/js-apis-huks.md) diff --git a/en/application-dev/faqs/faqs-graphics.md b/en/application-dev/faqs/faqs-graphics.md index 7eeba06447..9469a35736 100644 --- a/en/application-dev/faqs/faqs-graphics.md +++ b/en/application-dev/faqs/faqs-graphics.md @@ -1,90 +1,92 @@ -# Graphics and Image Development +# Graphics Development -## Why do the isStatusBarLightIcon and isNavigationBarLightIcon attributes not take effect when window.setSystemBarProperties() is called? +## How do I obtain the DPI of a device? -Applicable to: OpenHarmony SDK 3.2.5.3, stage model of API version 9 +Applicable to: OpenHarmony 3.2 Beta5 (API version 9, stage model) -In effect, the **isStatusBarLightIcon** and **isNavigationBarLightIcon** attributes turn the font white when set to **true**. If **statusBarContentColor** is also set in **window.setSystemBarProperties()**, the **isStatusBarLightIcon** attribute does not take effect. Similarly, if **navigationBarContentColor** is set, the **isNavigationBarLightIcon** attribute does not take effect. +**Solution** -## How do I set the style of the system bar? +Import the **@ohos.display** module and call the **getDefaultDisplaySync\(\)** API. -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 +**Example** -Import the **\@ohos.window** module, and call **window.setSystemBarProperties()**. +``` +import display from '@ohos.display'; +let displayClass = null; +try { + displayClass = display.getDefaultDisplaySync(); + console.info('Test densityDPI:' + JSON.stringify(displayClass.densityDPI)); +} catch (exception) { + console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception)); +} +``` ## How do I hide the status bar to get the immersive effect? -Applicable to: OpenHarmony SDK 3.2.6.3, stage model of API version 9 - -1. Use the **onWindowStageCreate** to obtain a **windowClass** object. - - ```ts - onWindowStageCreate(windowStage) { - // When the main window is created, set the main page for this ability. - console.log("[Demo] EntryAbility onWindowStageCreate") - windowStage.getMainWindow((err, data) => { - if (err.code) { - console.error('Failed to obtain the main window.') - return; - } - // Obtain a windowClass object. - globalThis.windowClass = data; - }) - } - ``` - -2. Enable the full-screen mode for the window and hide the status bar. - - ```ts - globalThis.windowClass.setFullScreen(isFullScreen, (err, data) => { - if (err.code) { - console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err)); - return; - } - console.info('Succeeded in enabling the full-screen mode. Data: ' + JSON.stringify(data)); - }); - ``` +Applicable to: OpenHarmony 3.2 Beta5 (API version 9, stage model) + +**Solution** + +1. Use **onWindowStageCreate** to obtain a **windowClass** object. + + ``` + onWindowStageCreate(windowStage) { + // When the main window is created, set the main page for this ability. + console.log("[Demo] MainAbility onWindowStageCreate") + windowStage.getMainWindow((err, data) => { + if (err.code) { + console.error('Failed to obtain the main window.') + return; + } + // Obtain a windowClass object. + globalThis.windowClass = data; + }) + } + ``` + +2. Enable the full-screen mode for the window and hide the status bar. + + ``` + globalThis.windowClass.setFullScreen(isFullScreen, (err, data) => { + if (err.code) { + console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in enabling the full-screen mode. Data: ' + JSON.stringify(data)); + }); + ``` + ## How do I obtain the window width and height? -Applicable to: OpenHarmony SDK 3.2.3.5, stage model of API version 9 +Applicable to: OpenHarmony SDK 3.2 Beta5 (API version 9, stage model) -Use **window.getProperties()** to obtain the window properties. The **windowRect** field in the properties specifies the window width and height. +**Solution** -Example: +Import the **@ohos.window** module, obtain a **Window** object, and use **getWindowProperties\(\)** of the object to obtain the window properties. The **windowRect** field in the properties specifies the window width and height. +**Example** -```ts -let promise = windowClass.getProperties(); -promise.then((data)=> { - console.info('Succeeded in obtaining the window properties. Data: ' + JSON.stringify(data.windowRect)); -}).catch((err)=>{ - console.error('Failed to obtain the window properties. Cause: ' + JSON.stringify(err)); -}); ``` - -## How do I set the color of the system bar? - -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 - -Refer to the following code: - - -```ts -window.getTopWindow(globalThis.mainContext).then(win => { - var systemBarProperties = { - statusBarColor: '#19B6FF', // Set the background color of the status bar. - navigationBarColor: '#19B6FF', // Set the background color of the navigation bar. - isStatusBarLightIcon: false, // Set the icon on the status bar not to be highlighted. - isNavigationBarLightIcon: true, // Set the icon on the navigation bar to be highlighted. - statusBarContentColor: '#0D0500', // Set the text color of the status bar. - navigationBarContentColor: '#FFA500' // Set the text color of the navigation bar. - }; - win.setSystemBarProperties(systemBarProperties).catch(err => { - INDEX_LOGGER.info(`set System Bar Properties failed:${err}`) - }) -}) -.catch(err => { - INDEX_LOGGER.info(`get top window failed:${err}`) -}) +import window from '@ohos.window'; +let windowClass = null; +try { + let promise = window.getLastWindow(this.context); + promise.then((data)=> { + // Obtain a Window object. + windowClass = data; + try { + // Obtain the window properties. + let properties = windowClass.getWindowProperties(); + let rect = properties.windowRect; + // rect.width: window width; rect.height: window height. + } catch (exception) { + console.error('Failed to obtain the window properties. Cause: ' + JSON.stringify(exception)); + } + console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data)); + }).catch((err)=>{ + console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err)); + });} catch (exception) { + console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception)); +} ``` diff --git a/en/application-dev/faqs/faqs-multimedia.md b/en/application-dev/faqs/faqs-multimedia.md new file mode 100644 index 0000000000..080860a9a5 --- /dev/null +++ b/en/application-dev/faqs/faqs-multimedia.md @@ -0,0 +1,135 @@ +# Multimedia Development + +## How do I obtain the frame data of a camera when using the XComponent to display the preview output stream of the camera? + +Applicable to: OpenHarmony 3.2 (API version 9, stage model) + +**Symptom** + +Currently, the API does not support real-time preview of the camera frame data. To obtain the frame data, you must bind an action, for example, photographing. + +**Solution** + +Create a dual-channel preview to obtain the frame data. + +1. Use the XComponent to create a preview stream. + + ``` + // Obtain a PreviewOutput instance. + const surfaceId = globalThis.mxXComponentController.getXComponentSurfaceld(); + this.mPreviewOutput = await Camera.createPreviewOutput(surfaceld) ; + ``` + +2. Use imageReceiver to listen for image information. + + ``` + // Add dual-channel preview. + const fullWidth = this.mFullScreenSize.width; + const fullHeight = this.mFullScreenSize.height; + const imageReceiver = await image.createImageReceiver(fullwidth, fullHeight, + formatImage, capacityImage) ; + const photoSurfaceId = await imageReceiver.getReceivingSurfaceld(); + this.mPreviewOutputDouble = await Camera.createPreviewOutput ( photoSurfaceld) + ``` + + +## How do I obtain the preview image of the front camera? + +Applicable to: OpenHarmony 3.2 (API version 9, stage model) + +**Solution** + +1. Use the **@ohos.multimedia.camera** module to obtain the physical camera information. + + ``` + let cameraManager = await camera.getCameraManager(context); + let camerasInfo = await cameraManager.getSupportedCameras(); + let cameraDevice = this.camerasInfo[0]; + ``` + +2. Create and start the input stream channel of the physical camera. + + ``` + let cameraInput = await cameraManager.createCameraInput(cameraDevice); + await this.cameraInput.open(); + ``` + +3. Obtain the output formats supported by the camera, and create a preview output channel based on the surface ID provided by the XComponent. + + ``` + let outputCapability = await this.cameraManager.getSupportedOutputCapability(cameraDevice); + let previewProfile = this.outputCapability.previewProfiles[0]; + let previewOutput = await cameraManager.createPreviewOutput(previewProfile, previewId); + ``` + +4. Create a camera session, add the camera input stream and preview output stream to the session, and start the session. The preview image is displayed on the XComponent. + + ``` + let captureSession = await cameraManager.createCaptureSession(); + await captureSession.beginConfig(); + await captureSession.addInput(cameraInput); + await captureSession.addOutput(previewOutput); + await this.captureSession.commitConfig() + await this.captureSession.start(); + ``` + + +## How do I set the camera focal length? + +Applicable to: OpenHarmony 3.2 (API version 9, stage model) + +**Solution** + +1. Check whether the camera is a front camera. A front camera does not support focal length setting. +2. Use **captureSession.getZoomRatioRange\(\)** to obtain the focal length range supported by the device. +3. Check whether the target focal length is within the range obtained. If yes, call **captureSession.setZoomRatio\(\)** to set the focal length. + +## How do I play music in the background? + +Applicable to: OpenHarmony 3.2 (API version 9, stage model) + +**Symptom** + +Music cannot be played in the background. + +**Solution** + +**AVSession** controls media playback. When a third-party application switches to the background or encounters a screen lock event, media playback is forcibly paused and the application is unaware of the pause. To enable the application to continue the playback in the background, request a continuous task and access the AVSession capability, which allows Control Panel to control the playback behavior of third-party applications. + +**Reference** + +[Continuous Task Development](../task-management/continuous-task-dev-guide.md) + +[AVSession Development](../media/using-avsession-developer.md) + + +## What should I do when multiple video components cannot be used for playback? + +Applicable to: OpenHarmony 3.2 (API version 9, stage model) + +**Symptom** + +A large number of video components are created. They cannot play media normally or even crash. + +**Solution** + +A maximum of 13 media player instances can be created. + + +## How do I invoke the image library directly? + +Applicable to: OpenHarmony 3.2 (API version 9, stage model) + +**Solution** + +``` +let want = { + bundleName: 'com.ohos.photos', + abilityName: 'com.ohos.photos.MainAbility', + parameters: { + uri: 'detail' + } +}; +let context = getContext(this) as common.UIAbilityContext; +context.startAbility(want); +``` diff --git a/en/application-dev/faqs/faqs-sensor.md b/en/application-dev/faqs/faqs-sensor.md new file mode 100644 index 0000000000..3932b223fb --- /dev/null +++ b/en/application-dev/faqs/faqs-sensor.md @@ -0,0 +1,7 @@ +# Pan-Sensor Development + +## Are the APIs used for obtaining PPG and ECG sensor data open to individual developers? + +Applicable to: OpenHarmony 3.1 Beta 5 (API version 9) + +Data collected by the PPG and ECG sensors of wearable devices is personal privacy data. Therefore, relative APIs are not open to individual developers. diff --git a/en/application-dev/faqs/faqs-third-fourth-party-library.md b/en/application-dev/faqs/faqs-third-fourth-party-library.md index 898055cd20..045a3f5efe 100644 --- a/en/application-dev/faqs/faqs-third-fourth-party-library.md +++ b/en/application-dev/faqs/faqs-third-fourth-party-library.md @@ -1,74 +1,69 @@ # Usage of Third- and Fourth-Party Libraries -## What does the following error message mean: "Stage model module... does not support including OpenHarmony npm packages or modules in FA model. OpenHarmony build tasks will not be executed, and OpenHarmony resources will not be packed." +## How do I obtain available third-party libraries? -Applicable to: OpenHarmony SDK 3.2.5.3, stage model of API version 9 +Applicable to: OpenHarmony 3.1 Beta 5 (API version 9) -The third- and fourth-party libraries are not yet compatible with the stage model of API version 9 and cannot be used. +The three-party and four-party libraries that can be obtained through ohpm are summarized in the [OpenHarmony-TPC/tpc_resource repository](https://gitee.com/openharmony-tpc/tpc_resource). You can access this repository, and find the desired component based on the directory index. -## Can I transfer project-level dependencies? +## Which third-party libraries are related to network requests? -Applicable to: OpenHarmony SDK 3.2.5.3, stage model of API version 9 +Applicable to: OpenHarmony 3.1 Beta 5 (API version 9) -For example, if project A depends on project B and project B depends on project C, can project A directly use the APIs provided by project C? +The following third-party libraries are related to network requests: [Axios](https://gitee.com/openharmony-sig/axios), httpclient, and okdownload. For details, see the [OpenHarmony-TPC/tpc_resource repository](https://gitee.com/openharmony-tpc/tpc_resource). -No. Project A cannot directly use the APIs provided by project C. The project packing tool NPM does not support dependency transfer. To use the APIs provided by project C, you can add the dependency of project C to project A. +## How do I use ohpm to import third- and fourth-party libraries? -## How do I obtain available third-party libraries? +Applicable to: OpenHarmony 3.1 Beta 5 (API version 9) -Applicable to: OpenHarmony SDK 3.2.6.5, stage model of API version 9 +**Solution** -For details, see [Third-Party Components That Can Be Directly Used on OpenHarmony](https://gitee.com/openharmony-sig/third_party_app_libs). +- Method 1: + 1. Open the **Terminal** window and run the following command to go to the **entry** directory: -## Which third-party libraries are related to network requests? + ``` + cd entry + ``` + + 2. Run the following command to install a third-party library, for example, **dayjs**: + + ``` + ohpm install dayjs + ``` + + 3. Add the following statement in the .js file to import the third-party library: + + ``` + import dayjs from 'dayjs'; + ``` -Applicable to: OpenHarmony SDK 3.2.6.5, stage model of API version 9 - -The [Axios](https://gitee.com/openharmony-sig/axios) library is related to network requests. - -## How do I use NPM to import third- and fourth-party libraries? - -Applicable to: OpenHarmony SDK 3.2.5.5, stage model of API version 9 -- Method 1: - 1. Open the **Terminal** window and run the following command to go to the **entry** directory: - - ``` - cd entry - ``` - 2. Run the following command to install a third-party package, for example, **dayjs**: - - ``` - npm install dayjs --save - ``` - 3. Add the following statement in the .js file to import the package: - - ``` - import dayjs from 'dayjs'; - ``` - -- Method 2: - 1. Enter the **entry** directory of the project and open the **package.json** file. - 2. Write the third-party NPM package to be installed (for example, **dayjs**) in the **package.json** file. - - ``` - { - "dependencies": { - "dayjs": "^1.10.4", + +- Method 2: + 1. Enter the **entry** directory of the project and open the **oh-package.json5** file. + 2. Write the third-party library to be installed (for example, **dayjs**) in the **oh-package.json5** file. + + ``` + { + "dependencies": { + "dayjs": "^1.10.4", + } } - } - ``` - 3. Open the **Terminal** window and run the following command to go to the **entry** directory: - - ``` - cd entry - ``` - 4. Run the following command to install NPM: - - ``` - npm install - ``` - 5. Add the following statement in the .js file to import the package: - - ``` - import dayjs from 'dayjs'; - ``` + ``` + + 3. Open the **Terminal** window and run the following command to go to the **entry** directory: + + ``` + cd entry + ``` + + 4. Run the following command to install the third-party library: + + ``` + ohpm install + ``` + + 5. Add the following statement in the .js file to import the third-party library: + + ``` + import dayjs from 'dayjs'; + ``` diff --git a/en/application-dev/faqs/faqs-window-manager.md b/en/application-dev/faqs/faqs-window-manager.md new file mode 100644 index 0000000000..7368ec7cbb --- /dev/null +++ b/en/application-dev/faqs/faqs-window-manager.md @@ -0,0 +1,64 @@ +# Window Management Development + +## How do I obtain the height of the status bar and navigation bar? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Before the window content is loaded, enable listening for the **systemAvoidAreaChange** event. + +**Example** + +``` +// MainAbility.ts +import window from '@ohos.window'; + +/** + * Set the immersive window and obtain the height of the status bar and navigation bar. + * @param mainWindow Indicates the main window. + */ +async function enterImmersion(mainWindow: window.Window) { + mainWindow.on("systemBarTintChange", (data) => { + let avoidAreaRect = data.regionTint[0].region; // data.regionTint is an array that contains the rectangle coordinates of the status bar and navigation bar. + }) + await mainWindow.setFullScreen(true) + await mainWindow.setSystemBarEnable(["status", "navigation"]) + await mainWindow.systemBarProperties({ + navigationBarColor: "#00000000", + statusBarColor: "#00000000", + navigationBarContentColor: "#FF0000", + statusBarContentColor: "#FF0000" + }) +} +export default class MainAbility extends Ability { + // Do something. + async onWindowStageCreate(windowStage: window.WindowStage) { + let mainWindow = await windowStage.getMainWindow() + await enterImmersion(mainWindow) + windowStage.loadContent('pages/index') + } + // Do something. +} +``` + +## How do I hide the status bar on the top of an application? + +Applicable to: OpenHarmony 3.2 Beta 5 (API version 9) + +**Solution** + +Use **setWindowSystemBarEnable** in the **onWindowStageCreate** lifecycle callback of UIAbility. + +**Example** + +``` +onWindowStageCreate(windowStage){ + windowStage.getMainWindowSync().setWindowSystemBarEnable([]) + ...... +} +``` + +**Reference** + +[Window](../reference/apis/js-apis-window.md) diff --git a/en/application-dev/website.md b/en/application-dev/website.md index 8183965d59..57e6eb6999 100644 --- a/en/application-dev/website.md +++ b/en/application-dev/website.md @@ -1534,12 +1534,20 @@ - FAQs - [Full SDK Compilation Guide](quick-start/full-sdk-compile-guide.md) - [Guide to Switching to Full SDK](quick-start/full-sdk-switch-guide.md) - - [Ability Framework Development](faqs/faqs-ability.md) - - [Resource Management Development](faqs/faqs-globalization.md) + - [Ability Development](faqs/faqs-ability.md) + - [Bundle Management Development](faqs/faqs-bundle-management.md) + - [Resource Manager Development](faqs/faqs-globalization.md) - [Common Event and Notification Development](faqs/faqs-event-notification.md) - - [Graphics and Image Development](faqs/faqs-graphics.md) + - [Graphics Development](faqs/faqs-graphics.md) + - [Window Management Development](faqs/faqs-window-manager.md) + - [Multimedia Development](faqs/faqs-multimedia.md) + - [Basic Security Capability Development](faqs/faqs-security.md) + - [Ability Access Control Development](faqs/faqs-ability-access-control.md) + - [Data Management Development](faqs/faqs-distributed-data-management.md) - [File Management Development](faqs/faqs-file-management.md) - [Network Management Development](faqs/faqs-network-management.md) - [DFX Development](faqs/faqs-dfx.md) + - [Pan-Sensor Development](faqs/faqs-sensor.md) - [Startup Development](faqs/faqs-startup.md) - - [Usage of Third- and Fourth-Party Libraries](faqs/faqs-third-fourth-party-library.md) \ No newline at end of file + - [Distributed Device Development](faqs/faqs-distributed-device-profile.md) + - [Usage of Third- and Fourth-Party Libraries](faqs/faqs-third-fourth-party-library.md) -- GitLab