提交 bf90fb09 编写于 作者: G ge-yafang

update docs

Signed-off-by: Nge-yafang <geyafang@huawei.com>
...@@ -737,7 +737,7 @@ class EntryAbility extends UIAbility { ...@@ -737,7 +737,7 @@ class EntryAbility extends UIAbility {
removePreferencesFromCacheSync(context: Context, name: string): void removePreferencesFromCacheSync(context: Context, name: string): void
Synchronously removes a **Preferences** instance from the cache. Removes a **Preferences** instance from the cache. This API returns the result synchronously.
After an application calls [getPreferences](#data_preferencesgetpreferences) for the first time to obtain a **Preferences** instance, the obtained **Preferences** instance is cached. When the application calls [getPreferences](#data_preferencesgetpreferences) again, the **Preferences** instance will be read from the cache instead of from the persistent file. After this API is called to remove the instance from the cache, calling **getPreferences** again will read data from the persistent file and create a new **Preferences** instance. After an application calls [getPreferences](#data_preferencesgetpreferences) for the first time to obtain a **Preferences** instance, the obtained **Preferences** instance is cached. When the application calls [getPreferences](#data_preferencesgetpreferences) again, the **Preferences** instance will be read from the cache instead of from the persistent file. After this API is called to remove the instance from the cache, calling **getPreferences** again will read data from the persistent file and create a new **Preferences** instance.
...@@ -1021,7 +1021,7 @@ try { ...@@ -1021,7 +1021,7 @@ try {
getSync(key: string, defValue: ValueType): ValueType getSync(key: string, defValue: ValueType): ValueType
Synchronously obtains the value corresponding to the specified key from the cached **Preferences** instance. If the value is null or is not of the default value type, **defValue** is returned. Obtains the value corresponding to the specified key from the cached **Preferences** instance. This API returns the result synchronously. If the value is null or is not of the default value type, **defValue** is returned.
**System capability**: SystemCapability.DistributedDataManager.Preferences.Core **System capability**: SystemCapability.DistributedDataManager.Preferences.Core
...@@ -1117,7 +1117,7 @@ try { ...@@ -1117,7 +1117,7 @@ try {
getAllSync(): Object getAllSync(): Object
Obtains all KV pairs from the cached **Preferences** instance synchronously. Obtains all KV pairs from the cached **Preferences** instance. This API returns the result synchronously.
**System capability**: SystemCapability.DistributedDataManager.Preferences.Core **System capability**: SystemCapability.DistributedDataManager.Preferences.Core
...@@ -1214,7 +1214,7 @@ try { ...@@ -1214,7 +1214,7 @@ try {
putSync(key: string, value: ValueType): void putSync(key: string, value: ValueType): void
Synchronously writes data to the cached **Preferences** instance. You can use [flush](#flush) to persist the **Preferences** instance. Writes data to the cached **Preferences** instance. This API returns the result synchronously. You can use [flush](#flush) to persist the **Preferences** instance.
**System capability**: SystemCapability.DistributedDataManager.Preferences.Core **System capability**: SystemCapability.DistributedDataManager.Preferences.Core
...@@ -1316,7 +1316,7 @@ try { ...@@ -1316,7 +1316,7 @@ try {
hasSync(key: string): boolean hasSync(key: string): boolean
Synchronously checks whether the cached **Preferences** instance contains the KV pair of the given key. Checks whether the cached **Preferences** instance contains the KV pair of the given key. This API returns the result synchronously.
**System capability**: SystemCapability.DistributedDataManager.Preferences.Core **System capability**: SystemCapability.DistributedDataManager.Preferences.Core
...@@ -1420,7 +1420,7 @@ try { ...@@ -1420,7 +1420,7 @@ try {
deleteSync(key: string): void deleteSync(key: string): void
Synchronously deletes a KV pair from the cached **Preferences** instance based on the specified key. You can use [flush](#flush) to persist the **Preferences** instance. Deletes a KV pair from the cached **Preferences** instance based on the specified key. This API returns the result synchronously. You can use [flush](#flush) to persist the **Preferences** instance.
**System capability**: SystemCapability.DistributedDataManager.Preferences.Core **System capability**: SystemCapability.DistributedDataManager.Preferences.Core
...@@ -1567,7 +1567,7 @@ try { ...@@ -1567,7 +1567,7 @@ try {
clearSync(): void clearSync(): void
Synchronously clears all data in the cached **Preferences** instance. You can use [flush](#flush) to persist the **Preferences** instance. Clears all data in the cached **Preferences** instance. This API returns the result synchronously. You can use [flush](#flush) to persist the **Preferences** instance.
**System capability**: SystemCapability.DistributedDataManager.Preferences.Core **System capability**: SystemCapability.DistributedDataManager.Preferences.Core
......
...@@ -388,7 +388,16 @@ context.startAbility(want, options).then(() => { ...@@ -388,7 +388,16 @@ context.startAbility(want, options).then(() => {
## 启动UIAbility的指定页面 ## 启动UIAbility的指定页面
一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,例如从一个UIAbility的页面中跳转到另外一个UIAbility时,希望启动目标UIAbility的指定页面。本文主要讲解目标UIAbility首次启动和目标UIAbility非首次启动两种启动指定页面的场景,以及在讲解启动指定页面之前会讲解到在调用方如何指定启动页面。 ### 概述
一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,例如从一个UIAbility的页面中跳转到另外一个UIAbility时,希望启动目标UIAbility的指定页面。
UIAbility的启动分为两种情况:UIAbility冷启动和UIAbility热启动。
- UIAbility冷启动:指的是UIAbility实例处于完全关闭状态下被启动,这需要完整地加载和初始化UIAbility实例的代码、资源等。
- UIAbility热启动:指的是UIAbility实例已经启动并在前台运行过,由于某些原因切换到后台,再次启动该UIAbility实例,这种情况下可以快速恢复UIAbility实例的状态。
本文主要讲解[目标UIAbility冷启动](#目标uiability冷启动)[目标UIAbility热启动](#目标uiability热启动)两种启动指定页面的场景,以及在讲解启动指定页面之前会讲解到在调用方如何指定启动页面。
### 调用方UIAbility指定启动页面 ### 调用方UIAbility指定启动页面
...@@ -416,9 +425,9 @@ context.startAbility(want).then(() => { ...@@ -416,9 +425,9 @@ context.startAbility(want).then(() => {
``` ```
### 目标UIAbility首次启动 ### 目标UIAbility启动
目标UIAbility首次启动时,在目标UIAbility的`onWindowStageCreate()`生命周期回调中,解析EntryAbility传递过来的want参数,获取到需要加载的页面信息url,传入`windowStage.loadContent()`方法。 目标UIAbility启动时,在目标UIAbility的`onWindowStageCreate()`生命周期回调中,解析EntryAbility传递过来的want参数,获取到需要加载的页面信息url,传入`windowStage.loadContent()`方法。
```ts ```ts
...@@ -448,7 +457,7 @@ export default class FuncAbility extends UIAbility { ...@@ -448,7 +457,7 @@ export default class FuncAbility extends UIAbility {
} }
``` ```
### 目标UIAbility非首次启动 ### 目标UIAbility启动
在应用开发中,会遇到目标UIAbility实例之前已经启动过的场景,这时再次启动目标UIAbility时,不会重新走初始化逻辑,只会直接触发`onNewWant()`生命周期方法。为了实现跳转到指定页面,需要在`onNewWant()`中解析要参数进行处理。 在应用开发中,会遇到目标UIAbility实例之前已经启动过的场景,这时再次启动目标UIAbility时,不会重新走初始化逻辑,只会直接触发`onNewWant()`生命周期方法。为了实现跳转到指定页面,需要在`onNewWant()`中解析要参数进行处理。
...@@ -460,26 +469,12 @@ export default class FuncAbility extends UIAbility { ...@@ -460,26 +469,12 @@ export default class FuncAbility extends UIAbility {
4. 用户点击联系人张三的短信按钮,会重新启动短信应用的UIAbility实例。 4. 用户点击联系人张三的短信按钮,会重新启动短信应用的UIAbility实例。
5. 由于短信应用的UIAbility实例已经启动过了,此时会触发该UIAbility的`onNewWant()`回调,而不会再走`onCreate()``onWindowStageCreate()`等初始化逻辑。 5. 由于短信应用的UIAbility实例已经启动过了,此时会触发该UIAbility的`onNewWant()`回调,而不会再走`onCreate()``onWindowStageCreate()`等初始化逻辑。
```mermaid 图1 目标UIAbility热启动
sequenceDiagram ![](figures/uiability-hot-start.png)
Participant U as 用户
Participant S as 短信应用
Participant C as 联系人应用
U->>S: 打开短信应用
S-->>U: 显示短信应用主页
U->>S: 将设备回到桌面界面
S->>S: 短信应用进入后台
U->>C: 打开联系人应用
C-->>U: 显示联系人应用界面
U->>C: 点击联系人张三的短信按钮
C->>S: 构造Want启动短信应用
S-->>U: 显示给张三发短信的页面
```
开发步骤如下所示。 开发步骤如下所示。
1. 首次启动短信应用的UIAbility实例时,在`onWindowStageCreate()`生命周期回调中,通过调用[`getUIContext()`](../reference/apis/js-apis-window.md#getuicontext10)接口获取UI上下文实例[`UIContext`](../reference/apis/js-apis-arkui-UIContext.md)对象。 1. 启动短信应用的UIAbility实例时,在`onWindowStageCreate()`生命周期回调中,通过调用[`getUIContext()`](../reference/apis/js-apis-window.md#getuicontext10)接口获取UI上下文实例[`UIContext`](../reference/apis/js-apis-arkui-UIContext.md)对象。
```ts ```ts
import AbilityConstant from '@ohos.app.ability.AbilityConstant'; import AbilityConstant from '@ohos.app.ability.AbilityConstant';
...@@ -499,15 +494,21 @@ S-->>U: 显示给张三发短信的页面 ...@@ -499,15 +494,21 @@ S-->>U: 显示给张三发短信的页面
// Main window is created, set main page for this ability // Main window is created, set main page for this ability
... ...
windowStage.loadContent(url, (err, data) => {
if (err.code) {
return;
}
let windowClass: window.Window; let windowClass: window.Window;
windowStage.getMainWindow((err, data) => { windowStage.getMainWindow((err, data) => {
if (err.code) { if (err.code) {
console.error(`Failed to obtain the main window. Code is ${err.code}, message is ${err.message}`); console.error(TAG, `Failed to obtain the main window. Code is ${err.code}, message is ${err.message}`);
return; return;
} }
windowClass = data; windowClass = data;
this.uiContext = windowClass.getUIContext(); this.uiContext = windowClass.getUIContext();
}) })
});
} }
} }
``` ```
...@@ -519,7 +520,7 @@ S-->>U: 显示给张三发短信的页面 ...@@ -519,7 +520,7 @@ S-->>U: 显示给张三发短信的页面
funcAbilityWant: Want; funcAbilityWant: Want;
uiContext: UIContext; uiContext: UIContext;
onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam) { onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
if (want?.parameters?.router && want.parameters.router === 'funcA') { if (want?.parameters?.router && want.parameters.router === 'funcA') {
let funcAUrl = 'pages/Second'; let funcAUrl = 'pages/Second';
let router: Router = this.uiContext.getRouter(); let router: Router = this.uiContext.getRouter();
......
...@@ -58,7 +58,7 @@ save接口会将文件保存在文件管理器,而不是图库。 ...@@ -58,7 +58,7 @@ save接口会将文件保存在文件管理器,而不是图库。
save返回的uri权限是读写权限,可以根据结果集里面的uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。 save返回的uri权限是读写权限,可以根据结果集里面的uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
```ts ```ts
let uri:string; let uris = null;
async photoViewPickerSave() { async photoViewPickerSave() {
try { try {
const photoSaveOptions = new picker.PhotoSaveOptions(); // 创建文件管理器保存选项实例 const photoSaveOptions = new picker.PhotoSaveOptions(); // 创建文件管理器保存选项实例
...@@ -68,9 +68,8 @@ save接口会将文件保存在文件管理器,而不是图库。 ...@@ -68,9 +68,8 @@ save接口会将文件保存在文件管理器,而不是图库。
try { try {
let photoSaveResult = await photoViewPicker.save(photoSaveOptions); let photoSaveResult = await photoViewPicker.save(photoSaveOptions);
if (photoSaveResult != undefined) { if (photoSaveResult != undefined) {
console.info("[picker] photoViewPickerSave photoSaveResult = " + JSON.stringify(photoSaveResult)); uris = photoSaveResult;
this.uri = photoSaveResult[0]; console.info('photoViewPicker.save to file succeed and uris are:' + uris);
console.info('photoViewPicker.save to file succeed and uri is:' + photoSaveResult[0]);
} }
} catch (err) { } catch (err) {
console.error(`[picker] Invoke photoViewPicker.save failed, code is ${err.code}, message is ${err.message}`); console.error(`[picker] Invoke photoViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
...@@ -112,6 +111,7 @@ save接口会将文件保存在文件管理器,而不是图库。 ...@@ -112,6 +111,7 @@ save接口会将文件保存在文件管理器,而不是图库。
```ts ```ts
const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例 const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例
documentSaveOptions.newFileNames = ["DocumentViewPicker01.txt"]; // 保存文件名(可选) documentSaveOptions.newFileNames = ["DocumentViewPicker01.txt"]; // 保存文件名(可选)
documentSaveOptions.fileSuffixChoices = ['.png', '.txt', '.mp4']; // 保存文件类型(可选)
``` ```
3. 创建文档选择器实例。调用[save()](../reference/apis/js-apis-file-picker.md#save-3)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的uri。 3. 创建文档选择器实例。调用[save()](../reference/apis/js-apis-file-picker.md#save-3)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的uri。
...@@ -119,11 +119,11 @@ save接口会将文件保存在文件管理器,而不是图库。 ...@@ -119,11 +119,11 @@ save接口会将文件保存在文件管理器,而不是图库。
</br>save返回的uri权限是读写权限,可以根据结果集中uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。 </br>save返回的uri权限是读写权限,可以根据结果集中uri进行文件读写等操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
```ts ```ts
let uri = null; let uris = null;
const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例 const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
documentViewPicker.save(documentSaveOptions).then((documentSaveResult) => { documentViewPicker.save(documentSaveOptions).then((documentSaveResult) => {
uri = documentSaveResult[0]; uris = documentSaveResult;
console.info('documentViewPicker.save to file succeed and uri is:' + uri); console.info('documentViewPicker.save to file succeed and uris are:' + uris);
}).catch((err) => { }).catch((err) => {
console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`); console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
}) })
......
...@@ -38,11 +38,11 @@ ...@@ -38,11 +38,11 @@
</br>select返回的uri权限是只读权限,可以根据结果集中uri进行读取文件数据操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。 </br>select返回的uri权限是只读权限,可以根据结果集中uri进行读取文件数据操作。注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。
```ts ```ts
let uri = null; let uris = null;
const photoViewPicker = new picker.PhotoViewPicker(); const photoViewPicker = new picker.PhotoViewPicker();
photoViewPicker.select(photoSelectOptions).then((photoSelectResult) => { photoViewPicker.select(photoSelectOptions).then((photoSelectResult) => {
uri = photoSelectResult.photoUris[0]; uris = photoSelectResult.photoUris;
console.info('photoViewPicker.select to file succeed and uri is:' + uri); console.info('photoViewPicker.select to file succeed and uris are:' + uris);
}).catch((err) => { }).catch((err) => {
console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`); console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
}) })
...@@ -77,6 +77,9 @@ ...@@ -77,6 +77,9 @@
```ts ```ts
const documentSelectOptions = new picker.DocumentSelectOptions(); const documentSelectOptions = new picker.DocumentSelectOptions();
documentSelectOptions.maxSelectNumber = 5; // 选择文档的最大数目(可选)
documentSelectOptions.defaultFilePathUri = "file://docs/storage/Users/currentUser/test"; // 指定选择的文件或者目录路径(可选)
documentSelectOptions.fileSuffixFilters = ['.png', '.txt', '.mp4']; // 选择文件的后缀类型(可选)
``` ```
3. 创建文档选择器实例。调用[select()](../reference/apis/js-apis-file-picker.md#select-3)接口拉起FilePicker界面进行文件选择。文件选择成功后,返回被选中文档的uri结果集。 3. 创建文档选择器实例。调用[select()](../reference/apis/js-apis-file-picker.md#select-3)接口拉起FilePicker界面进行文件选择。文件选择成功后,返回被选中文档的uri结果集。
...@@ -85,16 +88,12 @@ ...@@ -85,16 +88,12 @@
</br>例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据uri获取部分文件属性信息,比如文件大小、访问时间、修改时间等。如有获取文件名称需求,请暂时使用[startAbilityForResult](../../application-dev/application-models/uiability-intra-device-interaction.md)获取。 </br>例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据uri获取部分文件属性信息,比如文件大小、访问时间、修改时间等。如有获取文件名称需求,请暂时使用[startAbilityForResult](../../application-dev/application-models/uiability-intra-device-interaction.md)获取。
> **说明:**
>
> 目前DocumentSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
```ts ```ts
let uri = null; let uris = null;
const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例 const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => { documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => {
uri = documentSelectResult[0]; uris = documentSelectResult;
console.info('documentViewPicker.select to file succeed and uri is:' + uri); console.info('documentViewPicker.select to file succeed and uris are:' + uris);
}).catch((err) => { }).catch((err) => {
console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`); console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
}) })
...@@ -172,7 +171,7 @@ ...@@ -172,7 +171,7 @@
let uri = null; let uri = null;
const audioViewPicker = new picker.AudioViewPicker(); const audioViewPicker = new picker.AudioViewPicker();
audioViewPicker.select(audioSelectOptions).then(audioSelectResult => { audioViewPicker.select(audioSelectOptions).then(audioSelectResult => {
uri = audioSelectOptions[0]; uri = audioSelectResult[0];
console.info('audioViewPicker.select to file succeed and uri is:' + uri); console.info('audioViewPicker.select to file succeed and uri is:' + uri);
}).catch((err) => { }).catch((err) => {
console.error(`Invoke audioViewPicker.select failed, code is ${err.code}, message is ${err.message}`); console.error(`Invoke audioViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
......
...@@ -593,8 +593,13 @@ class EntryAbility extends UIAbility { ...@@ -593,8 +593,13 @@ class EntryAbility extends UIAbility {
| 类型 | 说明 | | 类型 | 说明 |
| ---------------- | ---------------------------------- | | ---------------- | ---------------------------------- |
<<<<<<< HEAD
| number | 主键的类型可以是number。 | | number | 主键的类型可以是number。 |
| string | 主键的类型可以是string。 | | string | 主键的类型可以是string。 |
=======
| number | 主键的类型可以是number |
| string | 主键的类型可以是string。 |
>>>>>>> 47cb75c33d5460a146af0ead5e8946365240866f
## UTCTime<sup>10+</sup> ## UTCTime<sup>10+</sup>
......
...@@ -244,7 +244,7 @@ async function example() { ...@@ -244,7 +244,7 @@ async function example() {
## DocumentViewPicker ## DocumentViewPicker
文件选择器对象,用来支撑选择和保存非媒体文件等用户场景,比如各种格式文档。在使用前,需要先创建DocumentViewPicker实例。 文件选择器对象,用来支撑选择和保存各种格式文档。在使用前,需要先创建DocumentViewPicker实例。
**系统能力**:SystemCapability.FileManagement.UserFileService **系统能力**:SystemCapability.FileManagement.UserFileService
...@@ -699,7 +699,7 @@ async function example() { ...@@ -699,7 +699,7 @@ async function example() {
枚举,可选择的媒体文件类型。 枚举,可选择的媒体文件类型。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 值 | 说明 | | 名称 | 值 | 说明 |
| ----- | ---- | ---- | | ----- | ---- | ---- |
...@@ -711,18 +711,18 @@ async function example() { ...@@ -711,18 +711,18 @@ async function example() {
图库选择选项。 图库选择选项。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 必填 | 说明 |
| ----------------------- | ------------------- | ---- | -------------------------------- | | ----------------------- | ------------------- | ---- | -------------------------------- |
| MIMEType? | [PhotoViewMIMETypes](#photoviewmimetypes) | 否 | 可选择的媒体文件类型,若无此参数,则默认为图片和视频类型 | | MIMEType | [PhotoViewMIMETypes](#photoviewmimetypes) | 否 | 可选择的媒体文件类型,若无此参数,则默认为图片和视频类型 |
| maxSelectNumber? | number | 否 | 选择媒体文件数量的最大值(默认值为50,最大值为500) | | maxSelectNumber | number | 否 | 选择媒体文件数量的最大值(默认值为50,最大值为500) |
## PhotoSelectResult ## PhotoSelectResult
返回图库选择后的结果集。 返回图库选择后的结果集。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 类型 | 可读 | 可写 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ----------------------- | ------------------- | ---- | ---- | ------------------------------ | | ----------------------- | ------------------- | ---- | ---- | ------------------------------ |
...@@ -733,27 +733,35 @@ async function example() { ...@@ -733,27 +733,35 @@ async function example() {
图片或视频的保存选项。 图片或视频的保存选项。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 必填 | 说明 |
| ----------------------- | ------------------- | ---- | ---------------------------- | | ----------------------- | ------------------- | ---- | ---------------------------- |
| newFileNames? | Array&lt;string&gt; | 否 | 拉起photoPicker进行保存图片或视频资源的文件名,若无此参数,则默认需要用户自行输入 | | newFileNames | Array&lt;string&gt; | 否 | 拉起photoPicker进行保存图片或视频资源的文件名,若无此参数,则默认需要用户自行输入 |
## DocumentSelectOptions ## DocumentSelectOptions
文档选择选项,目前不支持参数配置 文档选择选项。
**系统能力:** SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 类型 | 必填 | 说明 |
| ----------------------- | ------------------- | ---- | -------------------------------- |
| maxSelectNumber | number | 否 | 选择文件/目录最大个数,上限500,有效值范围1-500 |
| defaultFilePathUri | string | 否 | 指定选择的文件或者目录路径 |
| fileSuffixFilters | Array&lt;string&gt; | 否 | 选择文件的后缀类型 |
## DocumentSaveOptions ## DocumentSaveOptions
文档保存选项。 文档保存选项。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 必填 | 说明 |
| ----------------------- | ------------------- | ---- | ---------------------------- | | ----------------------- | ------------------- | ---- | ---------------------------- |
| newFileNames? | Array&lt;string&gt; | 否 | 拉起documentPicker进行保存的文件名,若无此参数,则默认需要用户自行输入 | | newFileNames | Array&lt;string&gt; | 否 | 拉起documentPicker进行保存的文件名,若无此参数,则默认需要用户自行输入 |
| defaultFilePathUri | string | 否 | 指定保存的文件或者目录路径 |
| fileSuffixChoices | Array&lt;string&gt; | 否 | 保存文件的后缀类型 |
## AudioSelectOptions ## AudioSelectOptions
...@@ -765,8 +773,8 @@ async function example() { ...@@ -765,8 +773,8 @@ async function example() {
音频的保存选项。 音频的保存选项。
**系统能力:** 以下各项对应的系统能力均为 SystemCapability.FileManagement.UserFileService **系统能力:** SystemCapability.FileManagement.UserFileService
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 必填 | 说明 |
| ----------------------- | ------------------- | ---- | ---------------------------- | | ----------------------- | ------------------- | ---- | ---------------------------- |
| newFileNames? | Array&lt;string&gt; | 否 | 拉起audioPicker进行保存音频资源的文件名,若无此参数,则默认需要用户自行输入 | | newFileNames | Array&lt;string&gt; | 否 | 拉起audioPicker进行保存音频资源的文件名,若无此参数,则默认需要用户自行输入 |
...@@ -6,6 +6,7 @@ HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成 ...@@ -6,6 +6,7 @@ HUKS所管理的密钥可以由应用导入或者由应用调用HUKS接口生成
> **说明** > **说明**
> >
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 > 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> 以下示例代码片段仅适用于JS语言开发。
## 导入模块 ## 导入模块
...@@ -896,7 +897,7 @@ async function TestExportFunc(alias, options) { ...@@ -896,7 +897,7 @@ async function TestExportFunc(alias, options) {
} }
} }
function exportKey(alias, options) : Promise<huks.HuksReturnResult> { function exportKey(alias, options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
try { try {
huks.exportKeyItem(alias, options, function (error, data) { huks.exportKeyItem(alias, options, function (error, data) {
......
...@@ -173,6 +173,7 @@ ...@@ -173,6 +173,7 @@
```ts ```ts
import bundleManager from '@ohos.bundle.bundleManager'; import bundleManager from '@ohos.bundle.bundleManager';
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';
async function checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> { async function checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {
let atManager = abilityAccessCtrl.createAtManager(); let atManager = abilityAccessCtrl.createAtManager();
...@@ -184,14 +185,16 @@ ...@@ -184,14 +185,16 @@
let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo; let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
tokenId = appInfo.accessTokenId; tokenId = appInfo.accessTokenId;
} catch (err) { } catch (error) {
let err: BusinessError = error as BusinessError;
console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
} }
// 校验应用是否被授予权限 // 校验应用是否被授予权限
try { try {
grantStatus = await atManager.checkAccessToken(tokenId, permission); grantStatus = await atManager.checkAccessToken(tokenId, permission);
} catch (err) { } catch (error) {
let err: BusinessError = error as BusinessError;
console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);
} }
...@@ -222,12 +225,11 @@ ...@@ -222,12 +225,11 @@
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window'; import window from '@ohos.window';
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';
const permissions: Array<Permissions> = ['ohos.permission.READ_CALENDAR']; const permissions: Array<Permissions> = ['ohos.permission.READ_CALENDAR'];
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
// ... // ...
onWindowStageCreate(windowStage: window.WindowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
// Main window is created, set main page for this ability // Main window is created, set main page for this ability
let context = this.context; let context = this.context;
...@@ -246,7 +248,7 @@ ...@@ -246,7 +248,7 @@
} }
} }
// 授权成功 // 授权成功
}).catch((err) => { }).catch((err: BusinessError) => {
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
}) })
// ... // ...
...@@ -259,6 +261,7 @@ ...@@ -259,6 +261,7 @@
```typescript ```typescript
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
const permissions: Array<Permissions> = ['ohos.permission.READ_CALENDAR']; const permissions: Array<Permissions> = ['ohos.permission.READ_CALENDAR'];
...@@ -281,7 +284,7 @@ ...@@ -281,7 +284,7 @@
} }
} }
// 授权成功 // 授权成功
}).catch((err) => { }).catch((err: BusinessError) => {
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
}) })
} }
...@@ -297,10 +300,59 @@ ...@@ -297,10 +300,59 @@
调用[requestPermissionsFromUser()](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)方法后,应用程序将等待用户授权的结果。如果用户授权,则可以继续访问目标操作。如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限。 调用[requestPermissionsFromUser()](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)方法后,应用程序将等待用户授权的结果。如果用户授权,则可以继续访问目标操作。如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限。
ArkTS语法不支持直接使用globalThis,需要通过一个单例的map来做中转。开发者需要:
a. 在EntryAbility.ets中导入构建的单例对象GlobalThis。
```ts
import { GlobalThis } from '../utils/globalThis'; // 需要根据globalThis.ets的路径自行适配
```
b. 在onCreate中添加:
```ts
GlobalThis.getInstance().setContext('context', this.context);
```
> **说明:**
>
> 由于在ts中引入ets文件会有告警提示,需要将EntryAbility.ts的文件后缀修改为EntryAbility.ets,并在module.json5中同步修改。
**globalThis.ets示例代码如下:**
```ts
import common from '@ohos.app.ability.common';
// 构造单例对象
export class GlobalThis {
private constructor() {}
private static instance: GlobalThis;
private _uiContexts = new Map<string, common.UIAbilityContext>();
public static getInstance(): GlobalThis {
if (!GlobalThis.instance) {
GlobalThis.instance = new GlobalThis();
}
return GlobalThis.instance;
}
getContext(key: string): common.UIAbilityContext | undefined {
return this._uiContexts.get(key);
}
setContext(key: string, value: common.UIAbilityContext): void {
this._uiContexts.set(key, value);
}
// 其他需要传递的内容依此扩展
}
```
```ts ```ts
import { BusinessError } from '@ohos.base';
import Want from '@ohos.app.ability.Want';
import { GlobalThis } from '../utils/globalThis';
import common from '@ohos.app.ability.common';
function openPermissionsInSystemSettings(): void { function openPermissionsInSystemSettings(): void {
let context = getContext(this) as common.UIAbilityContext; let context: common.UIAbilityContext = GlobalThis.getInstance().getContext('context');
let wantInfo = { let wantInfo: Want = {
action: 'action.settings.app.info', action: 'action.settings.app.info',
parameters: { parameters: {
settingsParamBundleName: 'com.example.myapplication' // 打开指定应用的详情页面 settingsParamBundleName: 'com.example.myapplication' // 打开指定应用的详情页面
...@@ -308,7 +360,7 @@ ...@@ -308,7 +360,7 @@
} }
context.startAbility(wantInfo).then(() => { context.startAbility(wantInfo).then(() => {
// ... // ...
}).catch((err) => { }).catch((err: BusinessError) => {
// ... // ...
}) })
} }
...@@ -319,6 +371,7 @@ ...@@ -319,6 +371,7 @@
通过调用[requestPermissionsFromUser()](../reference/apis/js-apis-inner-app-context.md#contextrequestpermissionsfromuser7)接口向用户动态申请授权。 通过调用[requestPermissionsFromUser()](../reference/apis/js-apis-inner-app-context.md#contextrequestpermissionsfromuser7)接口向用户动态申请授权。
```js ```js
import { BusinessError } from '@ohos.base';
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
reqPermissions() { reqPermissions() {
...@@ -329,7 +382,7 @@ reqPermissions() { ...@@ -329,7 +382,7 @@ reqPermissions() {
console.log("data:" + JSON.stringify(data)); console.log("data:" + JSON.stringify(data));
console.log("data permissions:" + JSON.stringify(data.permissions)); console.log("data permissions:" + JSON.stringify(data.permissions));
console.log("data result:" + JSON.stringify(data.authResults)); console.log("data result:" + JSON.stringify(data.authResults));
}, (err) => { }, (err: BusinessError) => {
console.error('Failed to start ability', err.code); console.error('Failed to start ability', err.code);
}); });
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册