未验证 提交 d7a60652 编写于 作者: O openharmony_ci 提交者: Gitee

!23368 元能力文档示例代码ArkTS规范整改

Merge pull request !23368 from liuliu/codecheck
...@@ -215,53 +215,47 @@ export default class IdlTestServiceStub extends rpc.RemoteObject implements IIdl ...@@ -215,53 +215,47 @@ export default class IdlTestServiceStub extends rpc.RemoteObject implements IIdl
super(des); super(des);
} }
async onRemoteMessageRequest(code: number, data, reply, option): Promise<boolean> { async onRemoteMessageRequest(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence,
option: rpc.MessageOption): Promise<boolean> {
console.log("onRemoteMessageRequest called, code = " + code); console.log("onRemoteMessageRequest called, code = " + code);
switch(code) { if (code == IdlTestServiceStub.COMMAND_TEST_INT_TRANSACTION) {
case IdlTestServiceStub.COMMAND_TEST_INT_TRANSACTION: { let _data = data.readInt();
let _data = data.readInt(); this.testIntTransaction(_data, (errCode: number, returnValue: number) => {
this.testIntTransaction(_data, (errCode, returnValue) => { reply.writeInt(errCode);
reply.writeInt(errCode); if (errCode == 0) {
if (errCode == 0) { reply.writeInt(returnValue);
reply.writeInt(returnValue);
}
});
return true;
}
case IdlTestServiceStub.COMMAND_TEST_STRING_TRANSACTION: {
let _data = data.readString();
this.testStringTransaction(_data, (errCode) => {
reply.writeInt(errCode);
});
return true;
}
case IdlTestServiceStub.COMMAND_TEST_MAP_TRANSACTION: {
let _data = new Map();
let _dataSize = data.readInt();
for (let i = 0; i < _dataSize; ++i) {
let key = data.readInt();
let value = data.readInt();
_data.set(key, value);
} }
this.testMapTransaction(_data, (errCode) => { });
reply.writeInt(errCode); return true;
}); } else if (code == IdlTestServiceStub.COMMAND_TEST_STRING_TRANSACTION) {
return true; let _data = data.readString();
} this.testStringTransaction(_data, (errCode: number) => {
case IdlTestServiceStub.COMMAND_TEST_ARRAY_TRANSACTION: { reply.writeInt(errCode);
let _data = data.readStringArray(); });
this.testArrayTransaction(_data, (errCode, returnValue) => { return true;
reply.writeInt(errCode); } else if (code == IdlTestServiceStub.COMMAND_TEST_MAP_TRANSACTION) {
if (errCode == 0) { let _data: Map<number, number> = new Map();
reply.writeInt(returnValue); let _dataSize = data.readInt();
} for (let i = 0; i < _dataSize; ++i) {
}); let key = data.readInt();
return true; let value = data.readInt();
} _data.set(key, value);
default: {
console.log("invalid request code" + code);
break;
} }
this.testMapTransaction(_data, (errCode: number) => {
reply.writeInt(errCode);
});
return true;
} else if (code == IdlTestServiceStub.COMMAND_TEST_ARRAY_TRANSACTION) {
let _data = data.readStringArray();
this.testArrayTransaction(_data, (errCode: number, returnValue: number) => {
reply.writeInt(errCode);
if (errCode == 0) {
reply.writeInt(returnValue);
}
});
return true;
} else {
console.log("invalid request code" + code);
} }
return false; return false;
} }
...@@ -312,17 +306,20 @@ class IdlTestImp extends IdlTestServiceStub { ...@@ -312,17 +306,20 @@ class IdlTestImp extends IdlTestServiceStub {
在服务实现接口后,需要向客户端公开该接口,以便客户端进程绑定。如果开发者的服务要公开该接口,请扩展Ability并实现onConnect()从而返回IRemoteObject,以便客户端能与服务进程交互。服务端向客户端公开IRemoteAbility接口的代码示例如下: 在服务实现接口后,需要向客户端公开该接口,以便客户端进程绑定。如果开发者的服务要公开该接口,请扩展Ability并实现onConnect()从而返回IRemoteObject,以便客户端能与服务进程交互。服务端向客户端公开IRemoteAbility接口的代码示例如下:
```ts ```ts
export default { import Want from '@ohos.app.ability.Want';
import rpc from "@ohos.rpc";
export default class ServiceAbility {
onStart() { onStart() {
console.info('ServiceAbility onStart'); console.info('ServiceAbility onStart');
}, };
onStop() { onStop() {
console.info('ServiceAbility onStop'); console.info('ServiceAbility onStop');
}, };
onCommand(want, startId) { onCommand(want: Want, startId: number) {
console.info('ServiceAbility onCommand'); console.info('ServiceAbility onCommand');
}, };
onConnect(want) { onConnect(want: Want) {
console.info('ServiceAbility onConnect'); console.info('ServiceAbility onConnect');
try { try {
console.log('ServiceAbility want:' + typeof(want)); console.log('ServiceAbility want:' + typeof(want));
...@@ -332,9 +329,9 @@ export default { ...@@ -332,9 +329,9 @@ export default {
console.log('ServiceAbility error:' + err) console.log('ServiceAbility error:' + err)
} }
console.info('ServiceAbility onConnect end'); console.info('ServiceAbility onConnect end');
return new IdlTestImp('connect'); return new IdlTestImp('connect') as rpc.RemoteObject;
}, };
onDisconnect(want) { onDisconnect(want: Want) {
console.info('ServiceAbility onDisconnect'); console.info('ServiceAbility onDisconnect');
console.info('ServiceAbility want:' + JSON.stringify(want)); console.info('ServiceAbility want:' + JSON.stringify(want));
} }
...@@ -346,6 +343,8 @@ export default { ...@@ -346,6 +343,8 @@ export default {
客户端调用connectServiceExtensionAbility()以连接服务时,客户端的onAbilityConnectDone中的onConnect回调会接收服务的onConnect()方法返回的IRemoteObject实例。由于客户端和服务在不同应用内,所以客户端应用的目录内必须包含.idl文件(SDK工具会自动生成Proxy代理类)的副本。客户端的onAbilityConnectDone中的onConnect回调会接收服务的onConnect()方法返回的IRemoteObject实例,使用IRemoteObject创建IdlTestServiceProxy类的实例对象testProxy,然后调用相关IPC方法。示例代码如下: 客户端调用connectServiceExtensionAbility()以连接服务时,客户端的onAbilityConnectDone中的onConnect回调会接收服务的onConnect()方法返回的IRemoteObject实例。由于客户端和服务在不同应用内,所以客户端应用的目录内必须包含.idl文件(SDK工具会自动生成Proxy代理类)的副本。客户端的onAbilityConnectDone中的onConnect回调会接收服务的onConnect()方法返回的IRemoteObject实例,使用IRemoteObject创建IdlTestServiceProxy类的实例对象testProxy,然后调用相关IPC方法。示例代码如下:
```ts ```ts
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
import IdlTestServiceProxy from './idl_test_service_proxy' import IdlTestServiceProxy from './idl_test_service_proxy'
function callbackTestIntTransaction(result: number, ret: number): void { function callbackTestIntTransaction(result: number, ret: number): void {
...@@ -372,10 +371,10 @@ function callbackTestArrayTransaction(result: number, ret: number): void { ...@@ -372,10 +371,10 @@ function callbackTestArrayTransaction(result: number, ret: number): void {
} }
} }
var onAbilityConnectDone = { let onAbilityConnectDone: common.ConnectOptions = {
onConnect:function (elementName, proxy) { onConnect: (elementName, proxy) => {
let testProxy = new IdlTestServiceProxy(proxy); let testProxy: IdlTestServiceProxy = new IdlTestServiceProxy(proxy);
let testMap = new Map(); let testMap: Map<number, number> = new Map();
testMap.set(1, 1); testMap.set(1, 1);
testMap.set(1, 2); testMap.set(1, 2);
testProxy.testIntTransaction(123, callbackTestIntTransaction); testProxy.testIntTransaction(123, callbackTestIntTransaction);
...@@ -383,21 +382,23 @@ var onAbilityConnectDone = { ...@@ -383,21 +382,23 @@ var onAbilityConnectDone = {
testProxy.testMapTransaction(testMap, callbackTestMapTransaction); testProxy.testMapTransaction(testMap, callbackTestMapTransaction);
testProxy.testArrayTransaction(['1','2'], callbackTestMapTransaction); testProxy.testArrayTransaction(['1','2'], callbackTestMapTransaction);
}, },
onDisconnect:function (elementName) { onDisconnect: (elementName) => {
console.log('onDisconnectService onDisconnect'); console.log('onDisconnectService onDisconnect');
}, },
onFailed:function (code) { onFailed: (code) => {
console.log('onDisconnectService onFailed'); console.log('onDisconnectService onFailed');
} }
}; };
let context: common.UIAbilityContext = this.context;
function connectAbility(): void { function connectAbility(): void {
let want = { let want: Want = {
bundleName: 'com.example.myapplicationidl', bundleName: 'com.example.myapplicationidl',
abilityName: 'com.example.myapplicationidl.ServiceAbility' abilityName: 'com.example.myapplicationidl.ServiceAbility'
}; };
let connectionId = -1; let connectionId = -1;
connectionId = this.context.connectServiceExtensionAbility(want, onAbilityConnectDone); connectionId = context.connectServiceExtensionAbility(want, onAbilityConnectDone);
} }
...@@ -427,18 +428,18 @@ export default class MySequenceable { ...@@ -427,18 +428,18 @@ export default class MySequenceable {
getString() : string { getString() : string {
return this.str; return this.str;
} }
marshalling(messageParcel) { marshalling(messageParcel: rpc.MessageSequence) {
messageParcel.writeInt(this.num); messageParcel.writeInt(this.num);
messageParcel.writeString(this.str); messageParcel.writeString(this.str);
return true; return true;
} }
unmarshalling(messageParcel) { unmarshalling(messageParcel: rpc.MessageSequence) {
this.num = messageParcel.readInt(); this.num = messageParcel.readInt();
this.str = messageParcel.readString(); this.str = messageParcel.readString();
return true; return true;
} }
private num; private num: number;
private str; private str: string;
} }
``` ```
......
...@@ -47,23 +47,23 @@ ...@@ -47,23 +47,23 @@
```ts ```ts
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';
function implicitStartAbility() { let context = getContext(this) as common.UIAbilityContext;
let context = getContext(this) as common.UIAbilityContext; let wantInfo: Want = {
let wantInfo = { // uncomment line below if wish to implicitly query only in the specific bundle.
// uncomment line below if wish to implicitly query only in the specific bundle. // bundleName: 'com.example.myapplication',
// bundleName: 'com.example.myapplication', 'action': 'ohos.want.action.viewData',
'action': 'ohos.want.action.viewData', // entities can be omitted.
// entities can be omitted. 'entities': ['entity.system.browsable'],
'entities': ['entity.system.browsable'], 'uri': 'https://www.test.com:8080/query/student'
'uri': 'https://www.test.com:8080/query/student'
}
context.startAbility(wantInfo).then(() => {
...
}).catch((err) => {
...
})
} }
context.startAbility(wantInfo).then(() => {
// ...
}).catch((err: BusinessError) => {
// ...
})
``` ```
匹配过程分析: 匹配过程分析:
......
...@@ -18,12 +18,13 @@ DevEco Studio默认工程中未自动生成AbilityStage,如需要使用Ability ...@@ -18,12 +18,13 @@ DevEco Studio默认工程中未自动生成AbilityStage,如需要使用Ability
```ts ```ts
import AbilityStage from '@ohos.app.ability.AbilityStage'; import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';
export default class MyAbilityStage extends AbilityStage { export default class MyAbilityStage extends AbilityStage {
onCreate() { onCreate() {
// 应用的HAP在首次加载的时,为该Module初始化操作 // 应用的HAP在首次加载的时,为该Module初始化操作
} }
onAcceptWant(want) { onAcceptWant(want: Want) {
// 仅specified模式下触发 // 仅specified模式下触发
return "MyAbilityStage"; return "MyAbilityStage";
} }
...@@ -58,9 +59,10 @@ DevEco Studio默认工程中未自动生成AbilityStage,如需要使用Ability ...@@ -58,9 +59,10 @@ DevEco Studio默认工程中未自动生成AbilityStage,如需要使用Ability
```ts ```ts
import AbilityStage from '@ohos.app.ability.AbilityStage'; import AbilityStage from '@ohos.app.ability.AbilityStage';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
export default class MyAbilityStage extends AbilityStage { export default class MyAbilityStage extends AbilityStage {
onMemoryLevel(level) { onMemoryLevel(level: AbilityConstant.MemoryLevel) {
// 根据系统可用内存的变化情况,释放不必要的内存 // 根据系统可用内存的变化情况,释放不必要的内存
} }
} }
......
...@@ -32,10 +32,13 @@ ...@@ -32,10 +32,13 @@
2. 构建数据库相关的RDB数据。 2. 构建数据库相关的RDB数据。
```ts ```ts
let valuesBucket = {"name": "gaolu"} import ohos_data_ability from '@ohos.data.dataAbility'
import rdb from '@ohos.data.rdb'
let valuesBucket: rdb.ValuesBucket = {"name": "gaolu"}
let da = new ohos_data_ability.DataAbilityPredicates() let da = new ohos_data_ability.DataAbilityPredicates()
let valArray =new Array("value1"); let valArray = new Array("value1");
let cars = new Array({"batchInsert1" : "value1",}); let cars = new Array({"batchInsert1" : "value1",} as rdb.ValuesBucket);
``` ```
注:关于DataAbilityPredicates的详细内容,请参考[DataAbility谓词](../reference/apis/js-apis-data-ability.md) 注:关于DataAbilityPredicates的详细内容,请参考[DataAbility谓词](../reference/apis/js-apis-data-ability.md)
...@@ -43,11 +46,13 @@ ...@@ -43,11 +46,13 @@
3. 调用insert方法向指定的DataAbility子模块插入数据。 3. 调用insert方法向指定的DataAbility子模块插入数据。
```ts ```ts
import { BusinessError } from '@ohos.base';
// callback方式调用: // callback方式调用:
DAHelper.insert( DAHelper.insert(
urivar, urivar,
valuesBucket, valuesBucket,
(error, data) => { (error: BusinessError, data: number) => {
console.info("DAHelper insert result: " + data) console.info("DAHelper insert result: " + data)
} }
); );
...@@ -55,10 +60,15 @@ ...@@ -55,10 +60,15 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
import { BusinessError } from '@ohos.base';
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// promise方式调用(await需要在async方法中使用): // promise方式调用(await需要在async方法中使用):
let datainsert = await DAHelper.insert(urivar, valuesBucket).then((data) => { let datainsert = await DAHelper.insert(urivar, valuesBucket).then((data) => {
console.info("insert success."); console.info("insert success.");
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("insert failed."); console.error("insert failed.");
}); });
``` ```
...@@ -66,6 +76,10 @@ ...@@ -66,6 +76,10 @@
4. 调用delete方法删除DataAbility子模块中指定的数据。 4. 调用delete方法删除DataAbility子模块中指定的数据。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// callback方式调用: // callback方式调用:
DAHelper.delete( DAHelper.delete(
urivar, urivar,
...@@ -78,6 +92,10 @@ ...@@ -78,6 +92,10 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// promise方式调用(await需要在async方法中使用): // promise方式调用(await需要在async方法中使用):
let datadelete = await DAHelper.delete( let datadelete = await DAHelper.delete(
urivar, urivar,
...@@ -88,6 +106,10 @@ ...@@ -88,6 +106,10 @@
5. 调用update方法更新指定DataAbility子模块中的数据。 5. 调用update方法更新指定DataAbility子模块中的数据。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// callback方式调用: // callback方式调用:
DAHelper.update( DAHelper.update(
urivar, urivar,
...@@ -101,6 +123,10 @@ ...@@ -101,6 +123,10 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// promise方式调用(await需要在async方法中使用): // promise方式调用(await需要在async方法中使用):
let dataupdate = await DAHelper.update( let dataupdate = await DAHelper.update(
urivar, urivar,
...@@ -112,6 +138,10 @@ ...@@ -112,6 +138,10 @@
6. 调用query方法在指定的DataAbility子模块中查找数据。 6. 调用query方法在指定的DataAbility子模块中查找数据。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// callback方式调用: // callback方式调用:
DAHelper.query( DAHelper.query(
urivar, urivar,
...@@ -125,6 +155,10 @@ ...@@ -125,6 +155,10 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// promise方式调用(await需要在async方法中使用): // promise方式调用(await需要在async方法中使用):
let dataquery = await DAHelper.query( let dataquery = await DAHelper.query(
urivar, urivar,
...@@ -136,6 +170,10 @@ ...@@ -136,6 +170,10 @@
7. 调用batchInsert方法向指定的DataAbility子模块批量插入数据。 7. 调用batchInsert方法向指定的DataAbility子模块批量插入数据。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// callback方式调用: // callback方式调用:
DAHelper.batchInsert( DAHelper.batchInsert(
urivar, urivar,
...@@ -148,6 +186,10 @@ ...@@ -148,6 +186,10 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// promise方式调用(await需要在async方法中使用): // promise方式调用(await需要在async方法中使用):
let databatchInsert = await DAHelper.batchInsert( let databatchInsert = await DAHelper.batchInsert(
urivar, urivar,
...@@ -158,6 +200,10 @@ ...@@ -158,6 +200,10 @@
8. 调用executeBatch方法向指定的DataAbility子模块进行数据的批量处理。 8. 调用executeBatch方法向指定的DataAbility子模块进行数据的批量处理。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// callback方式调用: // callback方式调用:
DAHelper.executeBatch( DAHelper.executeBatch(
urivar, urivar,
...@@ -168,7 +214,7 @@ ...@@ -168,7 +214,7 @@
valuesBucket: {"executeBatch" : "value1",}, valuesBucket: {"executeBatch" : "value1",},
predicates: da, predicates: da,
expectedCount:0, expectedCount:0,
predicatesBackReferences: null, predicatesBackReferences: undefined,
interrupted:true, interrupted:true,
} }
], ],
...@@ -180,6 +226,10 @@ ...@@ -180,6 +226,10 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'
let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
// promise方式调用(await需要在async方法中使用): // promise方式调用(await需要在async方法中使用):
let dataexecuteBatch = await DAHelper.executeBatch( let dataexecuteBatch = await DAHelper.executeBatch(
urivar, urivar,
...@@ -193,7 +243,7 @@ ...@@ -193,7 +243,7 @@
}, },
predicates: da, predicates: da,
expectedCount:0, expectedCount:0,
predicatesBackReferences: null, predicatesBackReferences: undefined,
interrupted:true, interrupted:true,
} }
] ]
......
...@@ -11,15 +11,16 @@ startAbility接口由FA模型切换到Stage模型的示例: ...@@ -11,15 +11,16 @@ startAbility接口由FA模型切换到Stage模型的示例:
```ts ```ts
import fa from '@ohos.ability.featureAbility'; import fa from '@ohos.ability.featureAbility';
let parameter = { import { BusinessError } from '@ohos.base';
fa.startAbility({
"want": { "want": {
bundleName: "com.example.myapplication", bundleName: "com.example.myapplication",
abilityName: "com.example.myapplication.EntryAbility" abilityName: "com.example.myapplication.EntryAbility"
} }
} }).then((data) => {
fa.startAbility(parameter).then((data) => {
console.info('startAbility success'); console.info('startAbility success');
}).catch((error) => { }).catch((error: BusinessError) => {
console.error('startAbility failed.'); console.error('startAbility failed.');
}) })
``` ```
...@@ -27,15 +28,17 @@ startAbility接口由FA模型切换到Stage模型的示例: ...@@ -27,15 +28,17 @@ startAbility接口由FA模型切换到Stage模型的示例:
- Stage示例示例 - Stage示例示例
```ts ```ts
import Want from '@ohos.app.ability.Want';
// context为Ability对象的成员,在非Ability对象内部调用需要 // context为Ability对象的成员,在非Ability对象内部调用需要
// 将Context对象传递过去 // 将Context对象传递过去
let wantInfo = { let wantInfo: Want = {
bundleName: "com.example.myapplication", bundleName: "com.example.myapplication",
abilityName: "EntryAbility" abilityName: "EntryAbility"
}; };
this.context.startAbility(wantInfo).then((data) => { this.context.startAbility(wantInfo).then(() => {
console.info('startAbility success.'); console.info('startAbility success.');
}).catch((error) => { }).catch((error: BusinessError) => {
console.error('startAbility failed.'); console.error('startAbility failed.');
}) })
``` ```
...@@ -17,6 +17,8 @@ import featureAbility from "@ohos.ability.featureAbility"; ...@@ -17,6 +17,8 @@ import featureAbility from "@ohos.ability.featureAbility";
```ts ```ts
import featureAbility from "@ohos.ability.featureAbility";
let context = featureAbility.getContext() let context = featureAbility.getContext()
``` ```
...@@ -28,39 +30,35 @@ let context = featureAbility.getContext() ...@@ -28,39 +30,35 @@ let context = featureAbility.getContext()
1. 查询Bundle信息。 1. 查询Bundle信息。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility'
export default { export function onCreate() {
onCreate() { // 获取context并调用相关方法
// 获取context并调用相关方法 let context = featureAbility.getContext();
let context = featureAbility.getContext(); context.getBundleName((data, bundleName)=>{
context.getBundleName((data, bundleName)=>{ console.info("ability bundleName:" + bundleName)
console.info("ability bundleName:" + bundleName) });
}); console.info('Application onCreate')
console.info('Application onCreate') }
}, export function onDestroy() {
onDestroy() { console.info('Application onDestroy')
console.info('Application onDestroy') }
},
}
``` ```
2. 设置当前featureAbility的显示方向。 2. 设置当前featureAbility的显示方向。
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility'
import bundleManager from '@ohos.bundle.bundleManager'; import bundleManager from '@ohos.bundle.bundleManager';
export default { export function onCreate() {
onCreate() { // 获取context并调用相关方法
// 获取context并调用相关方法 let context = featureAbility.getContext();
let context = featureAbility.getContext(); context.setDisplayOrientation(bundleManager.DisplayOrientation.LANDSCAPE).then(() => {
context.setDisplayOrientation(bundleManager.DisplayOrientation.LANDSCAPE).then(() => { console.info("Set display orientation.")
console.info("Set display orientation.") })
}) console.info('Application onCreate')
console.info('Application onCreate') }
}, export function onDestroy() {
onDestroy() { console.info('Application onDestroy')
console.info('Application onDestroy') }
},
}
``` ```
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let uiAbilityContext = this.context; let uiAbilityContext = this.context;
... ...
} }
...@@ -31,8 +33,9 @@ ...@@ -31,8 +33,9 @@
```ts ```ts
import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility'; import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
import Want from '@ohos.app.ability.Want';
export default class MyService extends ServiceExtensionAbility { export default class MyService extends ServiceExtensionAbility {
onCreate(want) { onCreate(want: Want) {
let serviceExtensionContext = this.context; let serviceExtensionContext = this.context;
... ...
} }
...@@ -53,8 +56,10 @@ ...@@ -53,8 +56,10 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let applicationContext = this.context.getApplicationContext(); let applicationContext = this.context.getApplicationContext();
... ...
} }
...@@ -96,9 +101,11 @@ ...@@ -96,9 +101,11 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let applicationContext = this.context.getApplicationContext(); let applicationContext = this.context.getApplicationContext();
let cacheDir = applicationContext.cacheDir; let cacheDir = applicationContext.cacheDir;
let tempDir = applicationContext.tempDir; let tempDir = applicationContext.tempDir;
...@@ -131,9 +138,11 @@ ...@@ -131,9 +138,11 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let cacheDir = this.context.cacheDir; let cacheDir = this.context.cacheDir;
let tempDir = this.context.tempDir; let tempDir = this.context.tempDir;
let filesDir = this.context.filesDir; let filesDir = this.context.filesDir;
...@@ -167,9 +176,11 @@ ...@@ -167,9 +176,11 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import contextConstant from '@ohos.app.ability.contextConstant'; import contextConstant from '@ohos.app.ability.contextConstant';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
// 存储普通信息前,切换到EL1设备级加密 // 存储普通信息前,切换到EL1设备级加密
if (this.context.area === contextConstant.AreaMode.EL2) { // 获取area if (this.context.area === contextConstant.AreaMode.EL2) { // 获取area
this.context.area = contextConstant.AreaMode.EL1; // 修改area this.context.area = contextConstant.AreaMode.EL1; // 修改area
...@@ -203,9 +214,11 @@ export default class EntryAbility extends UIAbility { ...@@ -203,9 +214,11 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let bundleName2 = 'com.example.application'; let bundleName2 = 'com.example.application';
let context2 = this.context.createBundleContext(bundleName2); let context2 = this.context.createBundleContext(bundleName2);
let label2 = context2.applicationInfo.label; let label2 = context2.applicationInfo.label;
...@@ -225,9 +238,11 @@ export default class EntryAbility extends UIAbility { ...@@ -225,9 +238,11 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let bundleName2 = 'com.example.application'; let bundleName2 = 'com.example.application';
let moduleName2 = 'module1'; let moduleName2 = 'module1';
let context2 = this.context.createModuleContext(bundleName2, moduleName2); let context2 = this.context.createModuleContext(bundleName2, moduleName2);
...@@ -240,9 +255,11 @@ export default class EntryAbility extends UIAbility { ...@@ -240,9 +255,11 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
let moduleName2 = 'module1'; let moduleName2 = 'module1';
let context2 = this.context.createModuleContext(moduleName2); let context2 = this.context.createModuleContext(moduleName2);
... ...
...@@ -260,17 +277,20 @@ export default class EntryAbility extends UIAbility { ...@@ -260,17 +277,20 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window'; import window from '@ohos.window';
const TAG: string = '[Example].[Entry].[EntryAbility]'; const TAG: string = '[Example].[Entry].[EntryAbility]';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
// 定义生命周期ID // 定义生命周期ID
lifecycleId: number; lifecycleId: number = -1;
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
// 定义生命周期回调对象 // 定义生命周期回调对象
let abilityLifecycleCallback = { let abilityLifecycleCallback: AbilityLifecycleCallback = {
// 当UIAbility创建时被调用 // 当UIAbility创建时被调用
onAbilityCreate(uiAbility) { onAbilityCreate(uiAbility) {
console.info(TAG, `onAbilityCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`); console.info(TAG, `onAbilityCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
......
...@@ -11,29 +11,33 @@ UIAbility关联访问ServiceAbility和UIAbility关联访问ServiceExtensionAbili ...@@ -11,29 +11,33 @@ UIAbility关联访问ServiceAbility和UIAbility关联访问ServiceExtensionAbili
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
console.info("EntryAbility onCreate"); console.info("EntryAbility onCreate");
} }
onDestroy() { onDestroy() {
console.info("EntryAbility onDestroy") console.info("EntryAbility onDestroy")
} }
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
console.info("EntryAbility onWindowStageCreate") console.info("EntryAbility onWindowStageCreate")
let want = { let want: Want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "ServiceAbility", abilityName: "ServiceAbility",
}; };
let options = { let options: common.ConnectOptions = {
onConnect:function (elementName, proxy) { onConnect: (elementName, proxy) => {
console.info("onConnect called."); console.info("onConnect called.");
}, },
onDisconnect:function (elementName) { onDisconnect: (elementName) => {
console.info("onDisconnect called."); console.info("onDisconnect called.");
}, },
onFailed:function (code) { onFailed: (code) => {
console.info("onFailed code is: " + code); console.info("onFailed code is: " + code);
} }
}; };
...@@ -58,29 +62,31 @@ export default class EntryAbility extends UIAbility { ...@@ -58,29 +62,31 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
import Extension from '@ohos.app.ability.ServiceExtensionAbility' import Extension from '@ohos.app.ability.ServiceExtensionAbility';
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
export default class ServiceExtension extends Extension { export default class ServiceExtension extends Extension {
onCreate(want) { onCreate(want: Want) {
console.info("ServiceExtension onCreate") console.info("ServiceExtension onCreate")
} }
onDestroy() { onDestroy() {
console.info("ServiceExtension onDestroy") console.info("ServiceExtension onDestroy")
} }
onRequest(want, startId) { onRequest(want: Want, startId: number) {
console.info("ServiceExtension onRequest") console.info("ServiceExtension onRequest")
let wantFA = { let wantFA: Want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "ServiceAbility", abilityName: "ServiceAbility",
}; };
let options = { let options: common.ConnectOptions = {
onConnect:function (elementName, proxy) { onConnect: (elementName, proxy) => {
console.info("onConnect called."); console.info("onConnect called.");
}, },
onDisconnect:function (elementName) { onDisconnect: (elementName) => {
console.info("onDisconnect called."); console.info("onDisconnect called.");
}, },
onFailed:function (code) { onFailed: (code) => {
console.info("onFailed code is: " + code); console.info("onFailed code is: " + code);
} }
}; };
......
...@@ -11,20 +11,22 @@ PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceA ...@@ -11,20 +11,22 @@ PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceA
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
let want = { let want: Want = {
bundleName: "com.ohos.stage", bundleName: "com.ohos.stage",
abilityName: "com.ohos.stage.ServiceExtensionAbility" abilityName: "com.ohos.stage.ServiceExtensionAbility"
}; };
let faConnect = { let faConnect: common.ConnectOptions = {
onConnect:function (elementName, proxy) { onConnect: (elementName, proxy) => {
console.info("Faconnection onConnect called."); console.info("Faconnection onConnect called.");
}, },
onDisconnect:function (elementName) { onDisconnect: (elementName) => {
console.info("Faconnection onDisconnect called."); console.info("Faconnection onDisconnect called.");
}, },
onFailed:function (code) { onFailed: (code) => {
console.info("Faconnection onFailed code is: " + code); console.info("Faconnection onFailed code is: " + code);
} }
}; };
...@@ -39,20 +41,22 @@ ServiceAbility/DataAbility关联访问ServiceExtensionAbility和ServiceAbility/D ...@@ -39,20 +41,22 @@ ServiceAbility/DataAbility关联访问ServiceExtensionAbility和ServiceAbility/D
```ts ```ts
import particleAbility from '@ohos.ability.particleAbility'; import particleAbility from '@ohos.ability.particleAbility';
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
let want = { let want: Want = {
bundleName: "com.ohos.stage", bundleName: "com.ohos.stage",
abilityName: "com.ohos.stage.ServiceExtensionAbility" abilityName: "com.ohos.stage.ServiceExtensionAbility"
}; };
let faConnect = { let faConnect: common.ConnectOptions = {
onConnect:function (elementName, proxy) { onConnect: (elementName, proxy) => {
console.info("Faconnection onConnect called."); console.info("Faconnection onConnect called.");
}, },
onDisconnect:function (elementName) { onDisconnect: (elementName) => {
console.info("Faconnection onDisconnect called."); console.info("Faconnection onDisconnect called.");
}, },
onFailed:function (code) { onFailed: (code) => {
console.info("Faconnection onFailed code is: " + code); console.info("Faconnection onFailed code is: " + code);
} }
}; };
......
...@@ -19,9 +19,11 @@ PageAbility创建连接本地ServiceAbility回调实例的代码以及连接本 ...@@ -19,9 +19,11 @@ PageAbility创建连接本地ServiceAbility回调实例的代码以及连接本
import rpc from "@ohos.rpc" import rpc from "@ohos.rpc"
import promptAction from '@ohos.promptAction' import promptAction from '@ohos.promptAction'
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility'
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
let option = { let option: common.ConnectOptions = {
onConnect: function onConnectCallback(element, proxy) { onConnect: (element, proxy) => {
console.info(`onConnectLocalService onConnectDone`) console.info(`onConnectLocalService onConnectDone`)
if (proxy === null) { if (proxy === null) {
promptAction.showToast({ promptAction.showToast({
...@@ -38,21 +40,21 @@ let option = { ...@@ -38,21 +40,21 @@ let option = {
message: "Connect service success" message: "Connect service success"
}) })
}, },
onDisconnect: function onDisconnectCallback(element) { onDisconnect: (element) => {
console.info(`onConnectLocalService onDisconnectDone element:${element}`) console.info(`onConnectLocalService onDisconnectDone element:${element}`)
promptAction.showToast({ promptAction.showToast({
message: "Disconnect service success" message: "Disconnect service success"
}) })
}, },
onFailed: function onFailedCallback(code) { onFailed: (code) => {
console.info(`onConnectLocalService onFailed errCode:${code}`) console.info(`onConnectLocalService onFailed errCode:${code}`)
promptAction.showToast({ promptAction.showToast({
message: "Connect local service onFailed" message: "Connect local service onFailed"
}) })
} }
} };
let request = { let request: Want = {
bundleName: "com.example.myapplication", bundleName: "com.example.myapplication",
abilityName: "com.example.myapplication.ServiceAbility", abilityName: "com.example.myapplication.ServiceAbility",
} }
...@@ -69,7 +71,7 @@ Service侧把自身的实例返回给调用侧的示例代码如下: ...@@ -69,7 +71,7 @@ Service侧把自身的实例返回给调用侧的示例代码如下:
import rpc from "@ohos.rpc" import rpc from "@ohos.rpc"
class FirstServiceAbilityStub extends rpc.RemoteObject { class FirstServiceAbilityStub extends rpc.RemoteObject {
constructor(des: any) { constructor(des: Object) {
if (typeof des === 'string') { if (typeof des === 'string') {
super(des) super(des)
} else { } else {
...@@ -77,7 +79,7 @@ class FirstServiceAbilityStub extends rpc.RemoteObject { ...@@ -77,7 +79,7 @@ class FirstServiceAbilityStub extends rpc.RemoteObject {
} }
} }
onRemoteRequest(code: number, data: any, reply: any, option: any) { onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption) {
console.info(`onRemoteRequest called`) console.info(`onRemoteRequest called`)
if (code === 1) { if (code === 1) {
let string = data.readString() let string = data.readString()
......
...@@ -7,56 +7,71 @@ ...@@ -7,56 +7,71 @@
创建DataAbility的代码示例如下: 创建DataAbility的代码示例如下:
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility';
import dataAbility from '@ohos.data.dataAbility' import dataAbility from '@ohos.data.dataAbility';
import relationalStore from '@ohos.data.relationalStore' import relationalStore from '@ohos.data.relationalStore';
import Want from '@ohos.app.ability.Want';
import { AsyncCallback, BusinessError } from '@ohos.base';
import rdb from '@ohos.data.rdb';
const TABLE_NAME = 'book' const TABLE_NAME = 'book'
const STORE_CONFIG = { name: 'book.db',securityLevel: 1 } const STORE_CONFIG: relationalStore.StoreConfig = { name: 'book.db',securityLevel: 1 }
const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS book(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, introduction TEXT NOT NULL)' const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS book(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, introduction TEXT NOT NULL)'
let rdbStore: relationalStore.RdbStore = undefined let rdbStore: relationalStore.RdbStore | undefined = undefined
export default { export default class DataAbility {
onInitialized(abilityInfo) { onInitialized(want: Want) {
console.info('DataAbility onInitialized, abilityInfo:' + abilityInfo.bundleName) console.info('DataAbility onInitialized, abilityInfo:' + want.bundleName)
let context = featureAbility.getContext() let context = featureAbility.getContext()
relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => { relationalStore.getRdbStore(context, STORE_CONFIG, (err, store) => {
console.info('DataAbility getRdbStore callback') console.info('DataAbility getRdbStore callback')
store.executeSql(SQL_CREATE_TABLE, []) store.executeSql(SQL_CREATE_TABLE, [])
rdbStore = store rdbStore = store
}); });
}, };
insert(uri, valueBucket, callback) { insert(uri: string, valueBucket: rdb.ValuesBucket, callback: AsyncCallback<number>) {
console.info('DataAbility insert start') console.info('DataAbility insert start')
rdbStore.insert(TABLE_NAME, valueBucket, callback) if (rdbStore) {
}, rdbStore.insert(TABLE_NAME, valueBucket, callback)
batchInsert(uri, valueBuckets, callback) { }
};
batchInsert(uri: string, valueBuckets: Array<rdb.ValuesBucket>, callback: AsyncCallback<number>) {
console.info('DataAbility batch insert start') console.info('DataAbility batch insert start')
for (let i = 0;i < valueBuckets.length; i++) { if (rdbStore) {
console.info('DataAbility batch insert i=' + i) for (let i = 0;i < valueBuckets.length; i++) {
if (i < valueBuckets.length - 1) { console.info('DataAbility batch insert i=' + i)
rdbStore.insert(TABLE_NAME, valueBuckets[i], (err: any, num: number) => { if (i < valueBuckets.length - 1) {
console.info('DataAbility batch insert ret=' + num) rdbStore.insert(TABLE_NAME, valueBuckets[i], (err: BusinessError, num: number) => {
}) console.info('DataAbility batch insert ret=' + num)
} else { })
rdbStore.insert(TABLE_NAME, valueBuckets[i], callback) } else {
rdbStore.insert(TABLE_NAME, valueBuckets[i], callback)
}
} }
} }
}, };
query(uri, columns, predicates, callback) { query(uri: string, columns: Array<string>, predicates: dataAbility.DataAbilityPredicates,
callback: AsyncCallback<relationalStore.ResultSet>) {
console.info('DataAbility query start') console.info('DataAbility query start')
let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
rdbStore.query(rdbPredicates, columns, callback) if (rdbStore) {
}, rdbStore.query(rdbPredicates, columns, callback)
update(uri, valueBucket, predicates, callback) { }
};
update(uri: string, valueBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates,
callback: AsyncCallback<number>) {
console.info('DataAbilityupdate start') console.info('DataAbilityupdate start')
let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
rdbStore.update(valueBucket, rdbPredicates, callback) if (rdbStore) {
}, rdbStore.update(valueBucket, rdbPredicates, callback)
delete(uri, predicates, callback) { }
};
delete(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback<number>) {
console.info('DataAbilitydelete start') console.info('DataAbilitydelete start')
let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
rdbStore.delete(rdbPredicates, callback) if (rdbStore) {
} rdbStore.delete(rdbPredicates, callback)
}
};
}; };
``` ```
...@@ -4,28 +4,28 @@ ...@@ -4,28 +4,28 @@
开发者需要重写app.js/app.ets中的生命周期回调函数,开发者通过DevEco Studio开发平台创建PageAbility时,DevEco Studio会在app.js/app.ets中默认生成onCreate()和onDestroy()方法,其他方法需要开发者自行实现。接口说明参见前述章节,创建PageAbility示例如下: 开发者需要重写app.js/app.ets中的生命周期回调函数,开发者通过DevEco Studio开发平台创建PageAbility时,DevEco Studio会在app.js/app.ets中默认生成onCreate()和onDestroy()方法,其他方法需要开发者自行实现。接口说明参见前述章节,创建PageAbility示例如下:
```ts ```ts
export default { export default class EntryAbility {
onCreate() { onCreate() {
console.info('Application onCreate') console.info('Application onCreate')
}, };
onDestroy() { onDestroy() {
console.info('Application onDestroy') console.info('Application onDestroy')
}, };
onShow() { onShow() {
console.info('Application onShow') console.info('Application onShow')
}, };
onHide() { onHide() {
console.info('Application onHide') console.info('Application onHide')
}, };
onActive() { onActive() {
console.info('Application onActive') console.info('Application onActive')
}, };
onInactive() { onInactive() {
console.info('Application onInactive') console.info('Application onInactive')
}, };
onNewWant() { onNewWant() {
console.info('Application onNewWant') console.info('Application onNewWant')
}, };
} }
``` ```
...@@ -84,14 +84,13 @@ import fs from '@ohos.file.fs'; ...@@ -84,14 +84,13 @@ import fs from '@ohos.file.fs';
try { try {
console.info('Begin to getOrCreateDistributedDir'); console.info('Begin to getOrCreateDistributedDir');
dir = await featureAbility.getContext().getOrCreateDistributedDir(); dir = await featureAbility.getContext().getOrCreateDistributedDir();
console.info('distribute dir is ' + dir) console.info('distribute dir is ' + dir);
let fd: number;
let path = dir + "/a.txt";
fd = fs.openSync(path, fs.OpenMode.READ_WRITE).fd;
fs.close(fd);
} catch (error) { } catch (error) {
console.error('getOrCreateDistributedDir failed with ' + error); console.error('getOrCreateDistributedDir failed with ' + error);
} }
let fd: number;
let path = dir + "/a.txt";
fd = fs.openSync(path, fs.OpenMode.READ_WRITE).fd;
fs.close(fd);
})() })()
``` ```
...@@ -6,33 +6,30 @@ ...@@ -6,33 +6,30 @@
重写ServiceAbility的生命周期方法,添加其他Ability请求与ServiceAbility交互时的处理方法。 重写ServiceAbility的生命周期方法,添加其他Ability请求与ServiceAbility交互时的处理方法。
```ts ```ts
import Want from '@ohos.app.ability.Want';
import rpc from "@ohos.rpc" import rpc from "@ohos.rpc"
class FirstServiceAbilityStub extends rpc.RemoteObject { class FirstServiceAbilityStub extends rpc.RemoteObject {
constructor(des: any) { constructor(des: string) {
if (typeof des === 'string') { super(des);
super(des)
} else {
return
}
} }
} }
export default { export default class ServiceAbility {
onStart() { onStart() {
console.info('ServiceAbility onStart') console.info('ServiceAbility onStart')
}, };
onStop() { onStop() {
console.info('ServiceAbility onStop') console.info('ServiceAbility onStop')
}, };
onCommand(want, startId) { onCommand(want: Want, startId: number) {
console.info('ServiceAbility onCommand') console.info('ServiceAbility onCommand')
}, };
onConnect(want) { onConnect(want: Want) {
console.info('ServiceAbility onConnect' + want) console.info('ServiceAbility onConnect' + want)
return new FirstServiceAbilityStub('test') return new FirstServiceAbilityStub('test')
}, };
onDisconnect(want) { onDisconnect(want: Want) {
console.info('ServiceAbility onDisconnect' + want) console.info('ServiceAbility onDisconnect' + want)
} }
} }
......
...@@ -27,17 +27,18 @@ ...@@ -27,17 +27,18 @@
const REQUEST_CODE = 99; const REQUEST_CODE = 99;
class StubTest extends rpc.RemoteObject { class StubTest extends rpc.RemoteObject {
constructor(des) { constructor(des: string) {
super(des); super(des);
} }
// 接收应用传递过来的消息处理,以及将处理的结果返回给应用 // 接收应用传递过来的消息处理,以及将处理的结果返回给应用
onRemoteMessageRequest(code, data, reply, option) { onRemoteMessageRequest(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence,
option: rpc.MessageOption) {
if (code === REQUEST_CODE) { if (code === REQUEST_CODE) {
// 接收应用传递过来的数据 // 接收应用传递过来的数据
// 应用使用多次调用data.writeInt()写入多个数据时,驱动可以通过多次调用data.readInt()方法接收对应的数据 // 应用使用多次调用data.writeInt()写入多个数据时,驱动可以通过多次调用data.readInt()方法接收对应的数据
let optFir = data.readInt(); let optFir: number = data.readInt();
let optSec = data.readInt(); let optSec: number = data.readInt();
// 驱动将数据的处理结果返回给应用 // 驱动将数据的处理结果返回给应用
// 示例中为接收了两个数据,并将两个数据的求和返回给应用 // 示例中为接收了两个数据,并将两个数据的求和返回给应用
reply.writeInt(optFir + optSec); reply.writeInt(optFir + optSec);
...@@ -52,6 +53,7 @@ ...@@ -52,6 +53,7 @@
```ts ```ts
import DriverExtensionAbility from '@ohos.app.ability.DriverExtensionAbility'; import DriverExtensionAbility from '@ohos.app.ability.DriverExtensionAbility';
import Want from '@ohos.app.ability.Want';
import rpc from '@ohos.rpc'; import rpc from '@ohos.rpc';
const TAG: string = '[Example].[Entry].[DriverExtAbility]'; const TAG: string = '[Example].[Entry].[DriverExtAbility]';
...@@ -62,24 +64,24 @@ ...@@ -62,24 +64,24 @@
} }
export default class DriverExtAbility extends DriverExtensionAbility { export default class DriverExtAbility extends DriverExtensionAbility {
onInit(want) { onInit(want: Want) {
console.info(TAG, `onInit, want: ${want.abilityName}`); console.info(TAG, `onInit, want: ${want.abilityName}`);
} }
onRelease() { onRelease() {
console.info(TAG, `onRelease, want: ${want.abilityName}`); console.info(TAG, `onRelease`);
} }
onConnect(want) { onConnect(want: Want) {
console.info(TAG, `onConnect, want: ${want.abilityName}`); console.info(TAG, `onConnect, want: ${want.abilityName}`);
return new StubTest("test"); return new StubTest("test");
} }
onDisconnect(want) { onDisconnect(want: Want) {
console.info(TAG, `onDisconnect, want: ${want.abilityName}`); console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
} }
onDump() { onDump(params: Array<string>) {
console.info(TAG, `onDump, params:` + JSON.stringify(params)); console.info(TAG, `onDump, params:` + JSON.stringify(params));
return ['params']; return ['params'];
} }
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
console.error("createDeviceManager err: " + JSON.stringify(err)); console.error("createDeviceManager err: " + JSON.stringify(err));
} }
} }
function getRemoteDeviceId() { function getRemoteDeviceId(): string | undefined {
if (typeof dmClass === 'object' && dmClass !== null) { if (typeof dmClass === 'object' && dmClass !== null) {
let list = dmClass.getAvailableDeviceListSync(); let list = dmClass.getAvailableDeviceListSync();
if (typeof (list) === 'undefined' || typeof (list.length) === 'undefined') { if (typeof (list) === 'undefined' || typeof (list.length) === 'undefined') {
......
...@@ -55,12 +55,13 @@ ...@@ -55,12 +55,13 @@
在InputMethodService.ts文件中,增加导入InputMethodExtensionAbility的依赖包,自定义类继承InputMethodExtensionAbility并加上需要的生命周期回调。 在InputMethodService.ts文件中,增加导入InputMethodExtensionAbility的依赖包,自定义类继承InputMethodExtensionAbility并加上需要的生命周期回调。
```ts ```ts
import Want from '@ohos.app.ability.Want';
import InputMethodExtensionAbility from '@ohos.InputMethodExtensionAbility'; import InputMethodExtensionAbility from '@ohos.InputMethodExtensionAbility';
import keyboardController from './model/KeyboardController' import keyboardController from './model/KeyboardController'
export default class InputDemoService extends InputMethodExtensionAbility { export default class InputDemoService extends InputMethodExtensionAbility {
onCreate(want) { onCreate(want: Want) {
keyboardController.onCreate(this.context); // 初始化窗口并注册对输入法框架的事件监听 keyboardController.onCreate(this.context); // 初始化窗口并注册对输入法框架的事件监听
} }
...@@ -141,7 +142,7 @@ ...@@ -141,7 +142,7 @@
this.panel = inputPanel; this.panel = inputPanel;
if(this.panel) { if(this.panel) {
await this.panel.resize(dWidth, keyHeight); await this.panel.resize(dWidth, keyHeight);
await this.panel.mobeTo(0, nonBarPosition); await this.panel.moveTo(0, nonBarPosition);
await this.panel.setUiContent('inputmethodextability/pages/Index'); await this.panel.setUiContent('inputmethodextability/pages/Index');
} }
}); });
...@@ -159,7 +160,7 @@ ...@@ -159,7 +160,7 @@
this.textInputClient = textInputClient; // 此为输入法客户端实例,由此调用输入法框架提供给输入法应用的功能接口 this.textInputClient = textInputClient; // 此为输入法客户端实例,由此调用输入法框架提供给输入法应用的功能接口
this.boardController = kbController; this.boardController = kbController;
}) })
globalThis.inputAbility.on('inputStop', () => { inputMethodAbility.on('inputStop', () => {
this.onDestroy(); // 销毁KeyboardController this.onDestroy(); // 销毁KeyboardController
}); });
} }
...@@ -277,14 +278,14 @@ ...@@ -277,14 +278,14 @@
// 数字键盘 // 数字键盘
@Component @Component
struct numberMenu { struct numberMenu {
private numberList: sourceListType[] private numberList: sourceListType[] = numberSourceListData;
build() { build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceEvenly }) { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceEvenly }) {
Flex({ justifyContent: FlexAlign.SpaceBetween }) { Flex({ justifyContent: FlexAlign.SpaceBetween }) {
ForEach(this.numberList, (item: sourceListType) => { // 数字键盘第一行 ForEach(this.numberList, (item: sourceListType) => { // 数字键盘第一行
keyItem({ keyValue: item }) keyItem({ keyValue: item })
}, (item: sourceListType) => item.content); }, (item: sourceListType): sourceListType => item.content);
} }
.padding({ top: "2%" }) .padding({ top: "2%" })
.width("96%") .width("96%")
...@@ -333,7 +334,7 @@ ...@@ -333,7 +334,7 @@
5. 在工程Module对应的[module.json5配置文件](../quick-start/module-configuration-file.md)中注册InputMethodExtensionAbility,type标签需要设置为“inputMethod”,srcEntry标签表示当前InputMethodExtensionAbility组件所对应的代码路径。 5. 在工程Module对应的[module.json5配置文件](../quick-start/module-configuration-file.md)中注册InputMethodExtensionAbility,type标签需要设置为“inputMethod”,srcEntry标签表示当前InputMethodExtensionAbility组件所对应的代码路径。
```ts ```json
{ {
"module": { "module": {
... ...
......
...@@ -13,12 +13,12 @@ Emitter的开发步骤如下: ...@@ -13,12 +13,12 @@ Emitter的开发步骤如下:
import emitter from "@ohos.events.emitter"; import emitter from "@ohos.events.emitter";
// 定义一个eventId为1的事件 // 定义一个eventId为1的事件
let event = { let event: emitter.InnerEvent = {
eventId: 1 eventId: 1
}; };
// 收到eventId为1的事件后执行该回调 // 收到eventId为1的事件后执行该回调
let callback = (eventData) => { let callback = (eventData: emitter.EventData) => {
console.info('event callback'); console.info('event callback');
}; };
...@@ -32,18 +32,16 @@ Emitter的开发步骤如下: ...@@ -32,18 +32,16 @@ Emitter的开发步骤如下:
import emitter from "@ohos.events.emitter"; import emitter from "@ohos.events.emitter";
// 定义一个eventId为1的事件,事件优先级为Low // 定义一个eventId为1的事件,事件优先级为Low
let event = { let event: emitter.InnerEvent = {
eventId: 1, eventId: 1,
priority: emitter.EventPriority.LOW priority: emitter.EventPriority.LOW
}; };
let eventData = { let data = new Map<string, Object>();
data: { data.set("content", "c");
"content": "c", data.set("id", 1);
"id": 1, data.set("isEmpty", false);
"isEmpty": false, let eventData: emitter.EventData = {data};
}
};
// 发送eventId为1的事件,事件内容为eventData // 发送eventId为1的事件,事件内容为eventData
emitter.emit(event, eventData); emitter.emit(event, eventData);
......
...@@ -9,7 +9,7 @@ Worker的开发步骤如下: ...@@ -9,7 +9,7 @@ Worker的开发步骤如下:
1. 在工程的[模块级build-profile.json5](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-building-configuration-0000001218440654#section6887184182020)文件的buildOption属性中添加配置信息。 1. 在工程的[模块级build-profile.json5](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-building-configuration-0000001218440654#section6887184182020)文件的buildOption属性中添加配置信息。
```ts ```json
"buildOption": { "buildOption": {
"sourceOption": { "sourceOption": {
"workers": [ "workers": [
...@@ -27,7 +27,7 @@ Worker的开发步骤如下: ...@@ -27,7 +27,7 @@ Worker的开发步骤如下:
let parent = worker.workerPort; let parent = worker.workerPort;
// 处理来自主线程的消息 // 处理来自主线程的消息
parent.onmessage = function(message) { parent.onmessage = (message) => {
console.info("onmessage: " + message) console.info("onmessage: " + message)
// 发送消息到主线程 // 发送消息到主线程
parent.postMessage("message from worker thread.") parent.postMessage("message from worker thread.")
...@@ -46,7 +46,7 @@ Worker的开发步骤如下: ...@@ -46,7 +46,7 @@ Worker的开发步骤如下:
wk.postMessage("message from main thread.") wk.postMessage("message from main thread.")
// 处理来自worker线程的消息 // 处理来自worker线程的消息
wk.onmessage = function(message) { wk.onmessage = (message) => {
console.info("message from worker: " + message) console.info("message from worker: " + message)
// 根据业务按需停止worker线程 // 根据业务按需停止worker线程
...@@ -65,7 +65,7 @@ Worker的开发步骤如下: ...@@ -65,7 +65,7 @@ Worker的开发步骤如下:
wk.postMessage("message from main thread.") wk.postMessage("message from main thread.")
// 处理来自worker线程的消息 // 处理来自worker线程的消息
wk.onmessage = function(message) { wk.onmessage = (message) => {
console.info("message from worker: " + message) console.info("message from worker: " + message)
// 根据业务按需停止worker线程 // 根据业务按需停止worker线程
......
...@@ -36,34 +36,35 @@ ...@@ -36,34 +36,35 @@
```ts ```ts
import missionManager from '@ohos.app.ability.missionManager' import missionManager from '@ohos.app.ability.missionManager'
import { BusinessError } from '@ohos.base';
let listener = { let listener: missionManager.MissionListener = {
// 任务创建 // 任务创建
onMissionCreated: function (mission) { onMissionCreated: (mission) => {
console.info("--------onMissionCreated-------") console.info("--------onMissionCreated-------")
}, },
// 任务销毁 // 任务销毁
onMissionDestroyed: function (mission) { onMissionDestroyed: (mission) => {
console.info("--------onMissionDestroyed-------") console.info("--------onMissionDestroyed-------")
}, },
// 任务快照变化 // 任务快照变化
onMissionSnapshotChanged: function (mission) { onMissionSnapshotChanged: (mission) => {
console.info("--------onMissionSnapshotChanged-------") console.info("--------onMissionSnapshotChanged-------")
}, },
// 任务被移动到前台 // 任务被移动到前台
onMissionMovedToFront: function (mission) { onMissionMovedToFront: (mission) => {
console.info("--------onMissionMovedToFront-------") console.info("--------onMissionMovedToFront-------")
}, },
// 任务图标变化 // 任务图标变化
onMissionIconUpdated: function (mission, icon) { onMissionIconUpdated: (mission, icon) => {
console.info("--------onMissionIconUpdated-------") console.info("--------onMissionIconUpdated-------")
}, },
// 任务名称变化 // 任务名称变化
onMissionLabelUpdated: function (mission) { onMissionLabelUpdated: (mission) => {
console.info("--------onMissionLabelUpdated-------") console.info("--------onMissionLabelUpdated-------")
}, },
// 任务实例被关闭 // 任务实例被关闭
onMissionClosed: function (mission) { onMissionClosed: (mission) => {
console.info("--------onMissionClosed-------") console.info("--------onMissionClosed-------")
} }
}; };
...@@ -80,8 +81,8 @@ ...@@ -80,8 +81,8 @@
// 3.获取单个任务的详细信息() // 3.获取单个任务的详细信息()
let missionId = 11; // 11只是示例,实际是从系统中获取的任务id,下面类似 let missionId = 11; // 11只是示例,实际是从系统中获取的任务id,下面类似
let mission = missionManager.getMissionInfo("", missionId).catch(function (err) { let mission = missionManager.getMissionInfo("", missionId).catch((err: BusinessError) => {
console.info(err); console.info('${err.code}');
}); });
// 4.获取任务快照 // 4.获取任务快照
...@@ -116,8 +117,8 @@ ...@@ -116,8 +117,8 @@
}); });
// 9.删除全部任务 // 9.删除全部任务
missionManager.clearAllMissions().catch(function (err) { missionManager.clearAllMissions().catch((err: BusinessError) => {
console.info(err); console.info('${err.code}');
}); });
// 10.解注册任务变化通知 // 10.解注册任务变化通知
......
...@@ -21,7 +21,9 @@ ...@@ -21,7 +21,9 @@
示例中的context的获取方式请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息)。示例中的`pixelMap`的获取方式请参见[图片解码](../media/image-decoding.md) 示例中的context的获取方式请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息)。示例中的`pixelMap`的获取方式请参见[图片解码](../media/image-decoding.md)
```ts ```ts
let context = ...; // UIAbilityContext import common from '@ohos.app.ability.common';
let context: common.UIAbilityContext = ...; // UIAbilityContext
let pixelMap: PixelMap = ...; // 图片的PixelMap信息 let pixelMap: PixelMap = ...; // 图片的PixelMap信息
context.setMissionIcon(pixelMap, (err) => { context.setMissionIcon(pixelMap, (err) => {
...@@ -41,11 +43,14 @@ context.setMissionIcon(pixelMap, (err) => { ...@@ -41,11 +43,14 @@ context.setMissionIcon(pixelMap, (err) => {
通过调用[`UIAbilityContext.setMissionLabel()`](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissionlabel)方法修改任务快照的名称。 通过调用[`UIAbilityContext.setMissionLabel()`](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissionlabel)方法修改任务快照的名称。
```ts ```ts
let context = ...; // UIAbilityContext import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
let context: common.UIAbilityContext = this.context; // UIAbilityContext
context.setMissionLabel('test').then(() => { context.setMissionLabel('test').then(() => {
console.info('Succeeded in seting mission label.'); console.info('Succeeded in seting mission label.');
}).catch((err) => { }).catch((err: BusinessErrpr) => {
console.error(`Failed to set mission label. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to set mission label. Code is ${err.code}, message is ${err.message}`);
}); });
``` ```
......
...@@ -42,15 +42,17 @@ FA模型中PageAbility对应Stage模型中的UIAbility。切换步骤如下。 ...@@ -42,15 +42,17 @@ FA模型中PageAbility对应Stage模型中的UIAbility。切换步骤如下。
```ts ```ts
import Window from '@ohos.window' import Window from '@ohos.window'
onWindowStageCreate(windowStage: Window.WindowStage) { export default class EntryAbility extends UIAbility {
// Main window is created, set main page for this ability onWindowStageCreate(windowStage: Window.WindowStage) {
windowStage.loadContent('pages/Index', (err, data) => { // Main window is created, set main page for this ability
if (err.code) { windowStage.loadContent('pages/Index', (err, data) => {
console.error("loadContent failed") if (err.code) {
return; console.error("loadContent failed")
} return;
}); }
} });
}
}
``` ```
...@@ -19,7 +19,7 @@ PageAbility作为可见Ability,可以通过startAbility启动有界面的且 ...@@ -19,7 +19,7 @@ PageAbility作为可见Ability,可以通过startAbility启动有界面的且
如果需设置当前Ability可由任何应用访问,对应config.json文件的示例代码如下所示: 如果需设置当前Ability可由任何应用访问,对应config.json文件的示例代码如下所示:
```ts ```json
{ {
"module": { "module": {
... ...
......
...@@ -134,27 +134,29 @@ export default class ServiceExtImpl extends IdlServiceExtStub { ...@@ -134,27 +134,29 @@ export default class ServiceExtImpl extends IdlServiceExtStub {
```ts ```ts
import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility'; import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
import ServiceExtImpl from '../IdlServiceExt/idl_service_ext_impl'; import ServiceExtImpl from '../IdlServiceExt/idl_service_ext_impl';
import Want from '@ohos.app.ability.Want';
import rpc from '@ohos.rpc';
const TAG: string = "[ServiceExtAbility]"; const TAG: string = "[ServiceExtAbility]";
export default class ServiceExtAbility extends ServiceExtensionAbility { export default class ServiceExtAbility extends ServiceExtensionAbility {
serviceExtImpl = new ServiceExtImpl("ExtImpl"); serviceExtImpl: ServiceExtImpl = new ServiceExtImpl("ExtImpl");
onCreate(want) { onCreate(want: Want) {
console.info(TAG, `onCreate, want: ${want.abilityName}`); console.info(TAG, `onCreate, want: ${want.abilityName}`);
} }
onRequest(want, startId) { onRequest(want: Want, startId: number) {
console.info(TAG, `onRequest, want: ${want.abilityName}`); console.info(TAG, `onRequest, want: ${want.abilityName}`);
} }
onConnect(want) { onConnect(want: Want) {
console.info(TAG, `onConnect, want: ${want.abilityName}`); console.info(TAG, `onConnect, want: ${want.abilityName}`);
// 返回ServiceExtImpl对象,客户端获取后便可以与ServiceExtensionAbility进行通信 // 返回ServiceExtImpl对象,客户端获取后便可以与ServiceExtensionAbility进行通信
return this.serviceExtImpl; return this.serviceExtImpl as rpc.RemoteObject;
} }
onDisconnect(want) { onDisconnect(want: Want) {
console.info(TAG, `onDisconnect, want: ${want.abilityName}`); console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
} }
...@@ -194,15 +196,19 @@ export default class ServiceExtImpl extends IdlServiceExtStub { ...@@ -194,15 +196,19 @@ export default class ServiceExtImpl extends IdlServiceExtStub {
1. 在系统应用中启动一个新的ServiceExtensionAbility。示例中的context的获取方式请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息) 1. 在系统应用中启动一个新的ServiceExtensionAbility。示例中的context的获取方式请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息)
```ts ```ts
let context = ...; // UIAbilityContext import common from '@ohos.app.ability.common';
let want = { import Want from '@ohos.app.ability.Want';
"deviceId": "", import { BusinessError } from '@ohos.base';
"bundleName": "com.example.myapplication",
"abilityName": "ServiceExtAbility" let context: common.UIAbilityContext = ...; // UIAbilityContext
let want: Want = {
deviceId: "",
bundleName: "com.example.myapplication",
abilityName: "ServiceExtAbility"
}; };
context.startServiceExtensionAbility(want).then(() => { context.startServiceExtensionAbility(want).then(() => {
console.info('Succeeded in starting ServiceExtensionAbility.'); console.info('Succeeded in starting ServiceExtensionAbility.');
}).catch((err) => { }).catch((err: BusinessError) => {
console.error(`Failed to start ServiceExtensionAbility. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to start ServiceExtensionAbility. Code is ${err.code}, message is ${err.message}`);
}) })
``` ```
...@@ -210,15 +216,19 @@ export default class ServiceExtImpl extends IdlServiceExtStub { ...@@ -210,15 +216,19 @@ export default class ServiceExtImpl extends IdlServiceExtStub {
2. 在系统应用中停止一个已启动的ServiceExtensionAbility。 2. 在系统应用中停止一个已启动的ServiceExtensionAbility。
```ts ```ts
let context = ...; // UIAbilityContext import common from '@ohos.app.ability.common';
let want = { import Want from '@ohos.app.ability.Want';
"deviceId": "", import { BusinessError } from '@ohos.base';
"bundleName": "com.example.myapplication",
"abilityName": "ServiceExtAbility" let context: common.UIAbilityContext = ...; // UIAbilityContext
let want: Want = {
deviceId: "",
bundleName: "com.example.myapplication",
abilityName: "ServiceExtAbility"
}; };
context.stopServiceExtensionAbility(want).then(() => { context.stopServiceExtensionAbility(want).then(() => {
console.info('Succeeded in stopping ServiceExtensionAbility.'); console.info('Succeeded in stopping ServiceExtensionAbility.');
}).catch((err) => { }).catch((err: BusinessError) => {
console.error(`Failed to stop ServiceExtensionAbility. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to stop ServiceExtensionAbility. Code is ${err.code}, message is ${err.message}`);
}) })
``` ```
...@@ -226,10 +236,13 @@ export default class ServiceExtImpl extends IdlServiceExtStub { ...@@ -226,10 +236,13 @@ export default class ServiceExtImpl extends IdlServiceExtStub {
3. 已启动的ServiceExtensionAbility停止自身。 3. 已启动的ServiceExtensionAbility停止自身。
```ts ```ts
let context = ...; // ServiceExtensionContext import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
let context: common.ServiceExtensionContext = ...; // ServiceExtensionContext
context.terminateSelf().then(() => { context.terminateSelf().then(() => {
console.info('Succeeded in terminating self.'); console.info('Succeeded in terminating self.');
}).catch((err) => { }).catch((err: BusinessError) => {
console.error(`Failed to terminate self. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to terminate self. Code is ${err.code}, message is ${err.message}`);
}) })
``` ```
...@@ -250,12 +263,15 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -250,12 +263,15 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
- 使用connectServiceExtensionAbility()建立与后台服务的连接。示例中的context的获取方式请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息) - 使用connectServiceExtensionAbility()建立与后台服务的连接。示例中的context的获取方式请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息)
```ts ```ts
let want = { import common from '@ohos.app.ability.common';
"deviceId": "", import Want from '@ohos.app.ability.Want';
"bundleName": "com.example.myapplication",
"abilityName": "ServiceExtAbility" let want: Want = {
deviceId: "",
bundleName: "com.example.myapplication",
abilityName: "ServiceExtAbility"
}; };
let options = { let options: common.ConnectOptions = {
onConnect(elementName, remote) { onConnect(elementName, remote) {
/* 此处的入参remote为ServiceExtensionAbility在onConnect生命周期回调中返回的对象, /* 此处的入参remote为ServiceExtensionAbility在onConnect生命周期回调中返回的对象,
* 开发者通过这个对象便可以与ServiceExtensionAbility进行通信,具体通信方式见下文 * 开发者通过这个对象便可以与ServiceExtensionAbility进行通信,具体通信方式见下文
...@@ -274,16 +290,17 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -274,16 +290,17 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
} }
} }
// 建立连接后返回的Id需要保存下来,在解绑服务时需要作为参数传入 // 建立连接后返回的Id需要保存下来,在解绑服务时需要作为参数传入
let connectionId = this.context.connectServiceExtensionAbility(want, options); let connectionId: number = this.context.connectServiceExtensionAbility(want, options);
``` ```
- 使用disconnectServiceExtensionAbility()断开与后台服务的连接。 - 使用disconnectServiceExtensionAbility()断开与后台服务的连接。
```ts ```ts
import { BusinessError } from '@ohos.base';
// connectionId为调用connectServiceExtensionAbility接口时的返回值,需开发者自行维护 // connectionId为调用connectServiceExtensionAbility接口时的返回值,需开发者自行维护
this.context.disconnectServiceExtensionAbility(connectionId).then((data) => { this.context.disconnectServiceExtensionAbility(connectionId).then(() => {
console.info('disconnectServiceExtensionAbility success'); console.info('disconnectServiceExtensionAbility success');
}).catch((error) => { }).catch((error: BusinessError) => {
console.error('disconnectServiceExtensionAbility failed'); console.error('disconnectServiceExtensionAbility failed');
}) })
``` ```
...@@ -297,20 +314,21 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -297,20 +314,21 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
```ts ```ts
// 客户端需要将服务端对外提供的idl_service_ext_proxy.ts导入到本地工程中 // 客户端需要将服务端对外提供的idl_service_ext_proxy.ts导入到本地工程中
import IdlServiceExtProxy from '../IdlServiceExt/idl_service_ext_proxy'; import IdlServiceExtProxy from '../IdlServiceExt/idl_service_ext_proxy';
import common from '@ohos.app.ability.common';
let options = { let options: common.ConnectOptions = {
onConnect(elementName, remote) { onConnect(elementName, remote) {
console.info('onConnect callback'); console.info('onConnect callback');
if (remote === null) { if (remote === null) {
console.info(`onConnect remote is null`); console.info(`onConnect remote is null`);
return; return;
} }
let serviceExtProxy = new IdlServiceExtProxy(remote); let serviceExtProxy: IdlServiceExtProxy = new IdlServiceExtProxy(remote);
// 通过接口调用的方式进行通信,屏蔽了RPC通信的细节,简洁明了 // 通过接口调用的方式进行通信,屏蔽了RPC通信的细节,简洁明了
serviceExtProxy.processData(1, (errorCode, retVal) => { serviceExtProxy.processData(1, (errorCode: number, retVal: number) => {
console.info(`processData, errorCode: ${errorCode}, retVal: ${retVal}`); console.info(`processData, errorCode: ${errorCode}, retVal: ${retVal}`);
}); });
serviceExtProxy.insertDataToMap('theKey', 1, (errorCode) => { serviceExtProxy.insertDataToMap('theKey', 1, (errorCode: number) => {
console.info(`insertDataToMap, errorCode: ${errorCode}`); console.info(`insertDataToMap, errorCode: ${errorCode}`);
}) })
}, },
...@@ -327,9 +345,11 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -327,9 +345,11 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
```ts ```ts
import rpc from '@ohos.rpc'; import rpc from '@ohos.rpc';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
const REQUEST_CODE = 1; const REQUEST_CODE = 1;
let options = { let options: common.ConnectOptions = {
onConnect(elementName, remote) { onConnect(elementName, remote) {
console.info('onConnect callback'); console.info('onConnect callback');
if (remote === null) { if (remote === null) {
...@@ -351,7 +371,7 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -351,7 +371,7 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
remote.sendMessageRequest(REQUEST_CODE, data, reply, option).then((ret) => { remote.sendMessageRequest(REQUEST_CODE, data, reply, option).then((ret) => {
let msg = reply.readInt(); let msg = reply.readInt();
console.info(`sendMessageRequest ret:${ret} msg:${msg}`); console.info(`sendMessageRequest ret:${ret} msg:${msg}`);
}).catch((error) => { }).catch((error: BusinessError) => {
console.info('sendMessageRequest failed'); console.info('sendMessageRequest failed');
}); });
}, },
...@@ -374,6 +394,7 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -374,6 +394,7 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
```ts ```ts
import rpc from '@ohos.rpc'; import rpc from '@ohos.rpc';
import { BusinessError } from '@ohos.base';
import bundleManager from '@ohos.bundle.bundleManager'; import bundleManager from '@ohos.bundle.bundleManager';
import { processDataCallback } from './i_idl_service_ext'; import { processDataCallback } from './i_idl_service_ext';
import { insertDataToMapCallback } from './i_idl_service_ext'; import { insertDataToMapCallback } from './i_idl_service_ext';
...@@ -396,7 +417,7 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap ...@@ -396,7 +417,7 @@ ServiceExtensionAbility服务组件在[onConnect()](../reference/apis/js-apis-ap
return; return;
} }
// 识别通过,执行正常业务逻辑 // 识别通过,执行正常业务逻辑
}).catch(err => { }).catch((err: BusinessError) => {
console.info(TAG, 'getBundleNameByUid failed: ' + err.message); console.info(TAG, 'getBundleNameByUid failed: ' + err.message);
}); });
} }
......
...@@ -16,17 +16,17 @@ PageAbility相关的能力通过featureAbility提供,启动本地Ability通过 ...@@ -16,17 +16,17 @@ PageAbility相关的能力通过featureAbility提供,启动本地Ability通过
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility'
import Want from '@ohos.app.ability.Want';
(async () => { (async () => {
try { try {
console.info('Begin to start ability') console.info('Begin to start ability')
let param = { let want: Want = {
want: { bundleName: "com.example.myapplication",
bundleName: "com.example.myapplication", moduleName: "entry",
moduleName: "entry", abilityName: "com.example.myapplication.EntryAbility"
abilityName: "com.example.myapplication.EntryAbility"
}
} }
await featureAbility.startAbility(param) await featureAbility.startAbility({want})
console.info(`Start ability succeed`) console.info(`Start ability succeed`)
} }
catch (error) { catch (error) {
......
...@@ -8,9 +8,10 @@ ...@@ -8,9 +8,10 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
async function restartAbility() { async function restartAbility() {
let wantInfo = { let wantInfo: Want = {
bundleName: "com.sample.MyApplication", bundleName: "com.sample.MyApplication",
abilityName: "EntryAbility", abilityName: "EntryAbility",
parameters: { parameters: {
...@@ -29,10 +30,32 @@ async function restartAbility() { ...@@ -29,10 +30,32 @@ async function restartAbility() {
在目标端PageAbility的onNewWant回调中获取包含页面信息的want参数: 在目标端PageAbility的onNewWant回调中获取包含页面信息的want参数:
```ts ```ts
export default { import Want from '@ohos.app.ability.Want';
onNewWant(want) { export class GlobalContext {
globalThis.newWant = want private constructor() {}
private static instance: GlobalContext;
private _objects = new Map<string, Object>();
public static getContext(): GlobalContext {
if (!GlobalContext.instance) {
GlobalContext.instance = new GlobalContext();
} }
return GlobalContext.instance;
}
getObject(value: string): Object | undefined {
return this._objects.get(value);
}
setObject(key: string, objectClass: Object): void {
this._objects.set(key, objectClass);
}
}
export default class EntryAbility{
onNewWant(want: Want) {
GlobalContext.getContext().setObject("newWant", want);
}
} }
``` ```
...@@ -40,18 +63,20 @@ export default { ...@@ -40,18 +63,20 @@ export default {
在目标端页面的自定义组件中获取包含页面信息的want参数并根据uri做路由处理: 在目标端页面的自定义组件中获取包含页面信息的want参数并根据uri做路由处理:
```ts ```ts
import router from '@ohos.router' import router from '@ohos.router';
import { GlobalContext } from '../GlobalContext'
@Entry @Entry
@Component @Component
struct Index { struct Index {
@State message: string = 'Router Page' @State message: string = 'Router Page'
newWant = undefined
onPageShow() { onPageShow() {
console.info('Index onPageShow') console.info('Index onPageShow')
let newWant = globalThis.newWant let newWant: Want = GlobalContext.getContext().getObject("newWant")
if (newWant.hasOwnProperty("page")) { if (newWant.hasOwnProperty("page")) {
router.push({ url: newWant.page }); router.push({ url: newWant.page });
globalThis.newWant = undefined GlobalContext.getContext().setObject("newWant", undefined)
} }
} }
...@@ -76,43 +101,47 @@ struct Index { ...@@ -76,43 +101,47 @@ struct Index {
调用方的页面中实现按钮点击触发startAbility方法启动目标端PageAbility,startAbility方法的入参want中携带指定页面信息,示例代码如下: 调用方的页面中实现按钮点击触发startAbility方法启动目标端PageAbility,startAbility方法的入参want中携带指定页面信息,示例代码如下:
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility';
import { BusinessError } from '@ohos.base';
@Entry @Entry
@Component @Component
struct Index { struct Index {
@State message: string = 'Hello World' @State message: string = 'Hello World'
build() { build() {
... Row() {
Button("startAbility") Button("startAbility")
.onClick(() => { .onClick(() => {
featureAbility.startAbility({ featureAbility.startAbility({
want: { want: {
bundleName: "com.exm.myapplication", bundleName: "com.exm.myapplication",
abilityName: "com.exm.myapplication.EntryAbility", abilityName: "com.exm.myapplication.EntryAbility",
parameters: { page: "pages/page1" } parameters: { page: "pages/page1" }
} }
}).then((data) => { }).then((data) => {
console.info("startAbility finish"); console.info("startAbility finish");
}).catch((err) => { }).catch((err: BusinessError) => {
console.info("startAbility failed errcode:" + err.code) console.info("startAbility failed errcode:" + err.code)
})
}) })
}) ...
... Button("page2")
Button("page2") .onClick(() => {
.onClick(() => { featureAbility.startAbility({
featureAbility.startAbility({ want: {
want: { bundleName: "com.exm.myapplication",
bundleName: "com.exm.myapplication", abilityName: "com.exm.myapplication.EntryAbility",
abilityName: "com.exm.myapplication.EntryAbility", parameters: { page: "pages/page2" }
parameters: { page: "pages/page2" } }
} }).then((data) => {
}).then((data) => { console.info("startAbility finish");
console.info("startAbility finish"); }).catch((err: BusinessError) => {
}).catch((err) => { console.info("startAbility failed errcode:" + err.code)
console.info("startAbility failed errcode:" + err.code) })
}) })
}) ...
}
... ...
} }
} }
...@@ -125,18 +154,20 @@ struct Index { ...@@ -125,18 +154,20 @@ struct Index {
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
import router from '@ohos.router'; import router from '@ohos.router';
export default { export default class EntryAbility {
onCreate() { onCreate() {
featureAbility.getWant().then((want) => { featureAbility.getWant().then((want) => {
if (want.parameters.page) { if (want.parameters) {
router.push({ if (want.parameters.page) {
url: want.parameters.page router.push({
}) url: want.parameters.page
})
}
} }
}) })
}, };
onDestroy() { onDestroy() {
... // ...
}, };
} }
``` ```
...@@ -13,26 +13,30 @@ ...@@ -13,26 +13,30 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import { BusinessError } from '@ohos.base';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
console.info("EntryAbility onCreate") console.info("EntryAbility onCreate")
} }
onDestroy() { onDestroy() {
console.info("EntryAbility onDestroy") console.info("EntryAbility onDestroy")
} }
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
console.info("EntryAbility onWindowStageCreate") console.info("EntryAbility onWindowStageCreate")
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
... // ...
}); });
let want = { let want: Want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "com.ohos.fa.EntryAbility", abilityName: "com.ohos.fa.EntryAbility",
}; };
this.context.startAbility(want).then(() => { this.context.startAbility(want).then(() => {
console.info('Start Ability successfully.'); console.info('Start Ability successfully.');
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("Ability failed: " + JSON.stringify(error)); console.error("Ability failed: " + JSON.stringify(error));
}); });
} }
...@@ -58,26 +62,30 @@ UIAbility通过startAbilityForResult启动PageABility和UIAbility通过startAbil ...@@ -58,26 +62,30 @@ UIAbility通过startAbilityForResult启动PageABility和UIAbility通过startAbil
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import { BusinessError } from '@ohos.base';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
console.info("EntryAbility onCreate") console.info("EntryAbility onCreate")
} }
onDestroy() { onDestroy() {
console.info("EntryAbility onDestroy") console.info("EntryAbility onDestroy")
} }
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
console.info("EntryAbility onWindowStageCreate") console.info("EntryAbility onWindowStageCreate")
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
... // ...
}); });
let want = { let want: Want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "EntryAbility", abilityName: "EntryAbility",
}; };
this.context.startAbilityForResult(want).then((result) => { this.context.startAbilityForResult(want).then((result) => {
console.info('Ability verify result: ' + JSON.stringify(result)); console.info('Ability verify result: ' + JSON.stringify(result));
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("Ability failed: " + JSON.stringify(error)); console.error("Ability failed: " + JSON.stringify(error));
}); });
} }
...@@ -101,23 +109,25 @@ export default class EntryAbility extends UIAbility { ...@@ -101,23 +109,25 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
import Extension from '@ohos.app.ability.ServiceExtensionAbility' import Extension from '@ohos.app.ability.ServiceExtensionAbility'
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';
export default class ServiceExtension extends Extension { export default class ServiceExtension extends Extension {
onCreate(want) { onCreate(want: Want) {
console.info("ServiceExtension onCreate") console.info("ServiceExtension onCreate")
} }
onDestroy() { onDestroy() {
console.info("ServiceExtension onDestroy") console.info("ServiceExtension onDestroy")
} }
onRequest(want, startId) { onRequest(want: Want, startId: number) {
console.info("ServiceExtension onRequest") console.info("ServiceExtension onRequest")
let wantFA = { let wantFA: Want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "EntryAbility", abilityName: "EntryAbility",
}; };
this.context.startAbility(wantFA).then(() => { this.context.startAbility(wantFA).then(() => {
console.info('Start Ability successfully.'); console.info('Start Ability successfully.');
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("Ability failed: " + JSON.stringify(error)); console.error("Ability failed: " + JSON.stringify(error));
}); });
} }
......
...@@ -52,7 +52,7 @@ async function RequestPermission() { ...@@ -52,7 +52,7 @@ async function RequestPermission() {
console.info('RequestPermission begin'); console.info('RequestPermission begin');
let array: Array<string> = ["ohos.permission.DISTRIBUTED_DATASYNC"]; let array: Array<string> = ["ohos.permission.DISTRIBUTED_DATASYNC"];
let bundleFlag = 0; let bundleFlag = 0;
let tokenID = undefined; let tokenID: number | undefined = undefined;
let userID = 100; let userID = 100;
let appInfo = await bundle.getApplicationInfo('ohos.samples.etsDemo', bundleFlag, userID); let appInfo = await bundle.getApplicationInfo('ohos.samples.etsDemo', bundleFlag, userID);
tokenID = appInfo.accessTokenId; tokenID = appInfo.accessTokenId;
...@@ -89,7 +89,7 @@ async function RequestPermission() { ...@@ -89,7 +89,7 @@ async function RequestPermission() {
```ts ```ts
import deviceManager from '@ohos.distributedHardware.deviceManager'; import deviceManager from '@ohos.distributedHardware.deviceManager';
let dmClass; let dmClass: deviceManager.DeviceManager;
function getDeviceManager() { function getDeviceManager() {
deviceManager.createDeviceManager('ohos.example.distributedService', (error, dm) => { deviceManager.createDeviceManager('ohos.example.distributedService', (error, dm) => {
...@@ -100,9 +100,9 @@ function getDeviceManager() { ...@@ -100,9 +100,9 @@ function getDeviceManager() {
}) })
} }
function getRemoteDeviceId() { function getRemoteDeviceId(): string | undefined {
if (typeof dmClass === 'object' && dmClass != null) { if (typeof dmClass === 'object' && dmClass != null) {
let list = dmClass.getTrustedDeviceListSync(); let list: Array<deviceManager.DeviceInfo> = dmClass.getTrustedDeviceListSync();
if (typeof (list) == 'undefined' || typeof (list.length) == 'undefined') { if (typeof (list) == 'undefined' || typeof (list.length) == 'undefined') {
console.info("EntryAbility onButtonClick getRemoteDeviceId err: list is null"); console.info("EntryAbility onButtonClick getRemoteDeviceId err: list is null");
return; return;
...@@ -111,6 +111,7 @@ function getRemoteDeviceId() { ...@@ -111,6 +111,7 @@ function getRemoteDeviceId() {
return list[0].deviceId; return list[0].deviceId;
} else { } else {
console.info("EntryAbility onButtonClick getRemoteDeviceId err: dmClass is null"); console.info("EntryAbility onButtonClick getRemoteDeviceId err: dmClass is null");
return;
} }
} }
``` ```
...@@ -123,15 +124,14 @@ function getRemoteDeviceId() { ...@@ -123,15 +124,14 @@ function getRemoteDeviceId() {
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
function onStartRemoteAbility() { function onStartRemoteAbility() {
console.info('onStartRemoteAbility begin'); console.info('onStartRemoteAbility begin');
let params; let wantValue: Want = {
let wantValue = {
bundleName: 'ohos.samples.etsDemo', bundleName: 'ohos.samples.etsDemo',
abilityName: 'ohos.samples.etsDemo.RemoteAbility', abilityName: 'ohos.samples.etsDemo.RemoteAbility',
deviceId: getRemoteDeviceId(), // getRemoteDeviceId的定义在前面的示例代码中 deviceId: getRemoteDeviceId(), // getRemoteDeviceId的定义在前面的示例代码中
parameters: params
}; };
console.info('onStartRemoteAbility want=' + JSON.stringify(wantValue)); console.info('onStartRemoteAbility want=' + JSON.stringify(wantValue));
featureAbility.startAbility({ featureAbility.startAbility({
......
...@@ -8,17 +8,16 @@ ServiceAbility的启动与其他Ability并无区别,应用开发者可以在Pa ...@@ -8,17 +8,16 @@ ServiceAbility的启动与其他Ability并无区别,应用开发者可以在Pa
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility' import featureAbility from '@ohos.ability.featureAbility'
import Want from '@ohos.app.ability.Want';
async function startServiceAbility() { async function startServiceAbility() {
try { try {
console.info('Begin to start ability') console.info('Begin to start ability')
let param = { let want: Want = {
want: { bundleName: "com.example.myapplication",
bundleName: "com.example.myapplication", abilityName: "com.example.myapplication.ServiceAbility"
abilityName: "com.example.myapplication.ServiceAbility"
}
} }
await featureAbility.startAbility(param) await featureAbility.startAbility({want})
console.info(`Start ability succeed`) console.info(`Start ability succeed`)
} catch (error) { } catch (error) {
console.error('Start ability failed with ' + error) console.error('Start ability failed with ' + error)
......
...@@ -10,16 +10,18 @@ ...@@ -10,16 +10,18 @@
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
import { BusinessError } from '@ohos.base';
let parameter = {
"want": { featureAbility.startAbility(
bundleName: "com.ohos.stage", {
abilityName: "EntryAbility" want: {
bundleName: "com.ohos.stage",
abilityName: "EntryAbility"
}
} }
}; ).then((code) => {
featureAbility.startAbility(parameter).then((code) => {
console.info('Ability verify code: ' + JSON.stringify(code)); console.info('Ability verify code: ' + JSON.stringify(code));
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("Ability failed: " + JSON.stringify(error)); console.error("Ability failed: " + JSON.stringify(error));
}); });
``` ```
...@@ -34,16 +36,17 @@ startAbilityForResult和startAbility的区别是当UIAbility销毁的时候会 ...@@ -34,16 +36,17 @@ startAbilityForResult和startAbility的区别是当UIAbility销毁的时候会
```ts ```ts
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
import { BusinessError } from '@ohos.base';
let parameter = {
"want": { featureAbility.startAbilityForResult(
bundleName: "com.ohos.stage", {
abilityName: "com.ohos.stage.EntryAbility" want: {
} bundleName: "com.ohos.stage",
}; abilityName: "com.ohos.stage.EntryAbility"
featureAbility.startAbilityForResult(parameter).then((result) => { }
}).then((result) => {
console.info('Ability verify result: ' + JSON.stringify(result)); console.info('Ability verify result: ' + JSON.stringify(result));
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("Ability failed: " + JSON.stringify(error)); console.error("Ability failed: " + JSON.stringify(error));
}); });
``` ```
...@@ -56,16 +59,18 @@ featureAbility.startAbilityForResult(parameter).then((result) => { ...@@ -56,16 +59,18 @@ featureAbility.startAbilityForResult(parameter).then((result) => {
```ts ```ts
import particleAbility from '@ohos.ability.particleAbility'; import particleAbility from '@ohos.ability.particleAbility';
import { BusinessError } from '@ohos.base';
let parameter = {
"want": { particleAbility.startAbility(
bundleName: "com.ohos.stage", {
abilityName: "com.ohos.stage.EntryAbility" want: {
bundleName: "com.ohos.stage",
abilityName: "com.ohos.stage.EntryAbility"
}
} }
}; ).then(() => {
particleAbility.startAbility(parameter).then(() => {
console.info('Start Ability successfully.'); console.info('Start Ability successfully.');
}).catch((error) => { }).catch((error: BusinessError) => {
console.error("Ability failed: " + JSON.stringify(error)); console.error("Ability failed: " + JSON.stringify(error));
}); });
``` ```
...@@ -21,22 +21,24 @@ ...@@ -21,22 +21,24 @@
```ts ```ts
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import { Configuration } from '@ohos.app.ability.Configuration';
import EnvironmentCallback from '@ohos.app.ability.EnvironmentCallback';
@Entry @Entry
@Component @Component
struct Index { struct Index {
private context = getContext(this) as common.UIAbilityContext; private context = getContext(this) as common.UIAbilityContext;
private callbackId: number; // 注册订阅系统环境变化的ID private callbackId: number = 0; // 注册订阅系统环境变化的ID
subscribeConfigurationUpdate() { subscribeConfigurationUpdate() {
let systemLanguage: string = this.context.config.language; // 获取系统当前语言 let systemLanguage: string | undefined = this.context.config.language; // 获取系统当前语言
// 1.获取ApplicationContext // 1.获取ApplicationContext
let applicationContext = this.context.getApplicationContext(); let applicationContext = this.context.getApplicationContext();
// 2.通过applicationContext订阅环境变量变化 // 2.通过applicationContext订阅环境变量变化
let environmentCallback = { let environmentCallback: EnvironmentCallback = {
onConfigurationUpdated(newConfig) { onConfigurationUpdated(newConfig: Configuration) {
console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`); console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
if (this.systemLanguage !== newConfig.language) { if (this.systemLanguage !== newConfig.language) {
...@@ -68,7 +70,7 @@ ...@@ -68,7 +70,7 @@
@Component @Component
struct Index { struct Index {
private context = getContext(this) as common.UIAbilityContext; private context = getContext(this) as common.UIAbilityContext;
private callbackId: number; // 注册订阅系统环境变化的ID private callbackId: number = 0; // 注册订阅系统环境变化的ID
unsubscribeConfigurationUpdate() { unsubscribeConfigurationUpdate() {
let applicationContext = this.context.getApplicationContext(); let applicationContext = this.context.getApplicationContext();
...@@ -95,8 +97,9 @@ ...@@ -95,8 +97,9 @@
```ts ```ts
import AbilityStage from '@ohos.app.ability.AbilityStage'; import AbilityStage from '@ohos.app.ability.AbilityStage';
import { Configuration } from '@ohos.app.ability.Configuration';
let systemLanguage: string; // 系统当前语言 let systemLanguage: string | undefined; // 系统当前语言
export default class MyAbilityStage extends AbilityStage { export default class MyAbilityStage extends AbilityStage {
onCreate() { onCreate() {
...@@ -104,7 +107,7 @@ export default class MyAbilityStage extends AbilityStage { ...@@ -104,7 +107,7 @@ export default class MyAbilityStage extends AbilityStage {
console.info(`systemLanguage is ${systemLanguage} `); console.info(`systemLanguage is ${systemLanguage} `);
} }
onConfigurationUpdate(newConfig) { onConfigurationUpdate(newConfig: Configuration) {
console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`); console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
if (systemLanguage !== newConfig.language) { if (systemLanguage !== newConfig.language) {
...@@ -127,16 +130,19 @@ UIAbility组件提供了`UIAbility.onConfigurationUpdate()`回调方法用于订 ...@@ -127,16 +130,19 @@ UIAbility组件提供了`UIAbility.onConfigurationUpdate()`回调方法用于订
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
import { Configuration } from '@ohos.app.ability.Configuration';
let systemLanguage: string; // 系统当前语言 let systemLanguage: string | undefined; // 系统当前语言
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
systemLanguage = this.context.config.language; // UIAbility实例首次加载时,获取系统当前语言 systemLanguage = this.context.config.language; // UIAbility实例首次加载时,获取系统当前语言
console.info(`systemLanguage is ${systemLanguage} `); console.info(`systemLanguage is ${systemLanguage} `);
} }
onConfigurationUpdate(newConfig) { onConfigurationUpdate(newConfig: Configuration) {
console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`); console.info(`onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
if (systemLanguage !== newConfig.language) { if (systemLanguage !== newConfig.language) {
...@@ -145,7 +151,7 @@ export default class EntryAbility extends UIAbility { ...@@ -145,7 +151,7 @@ export default class EntryAbility extends UIAbility {
} }
} }
... // ...
} }
``` ```
...@@ -161,12 +167,13 @@ ExtensionAbility组件提供了`onConfigurationUpdate()`回调方法用于订阅 ...@@ -161,12 +167,13 @@ ExtensionAbility组件提供了`onConfigurationUpdate()`回调方法用于订阅
```ts ```ts
import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import { Configuration } from '@ohos.app.ability.Configuration';
export default class EntryFormAbility extends FormExtensionAbility { export default class EntryFormAbility extends FormExtensionAbility {
onConfigurationUpdate(newConfig) { onConfigurationUpdate(newConfig: Configuration) {
console.info(`newConfig is ${JSON.stringify(newConfig)}`); console.info(`newConfig is ${JSON.stringify(newConfig)}`);
} }
... // ...
} }
``` ```
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
基于OpenHarmony的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 基于OpenHarmony的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。
- [使用EventHub进行数据通信](#使用eventhub进行数据通信):在基类Context中提供了EventHub对象,可以通过发布订阅方式来实现事件的传递。在事件传递前,订阅者需要先进行订阅,当发布者发布事件时,订阅者将接收到事件并进行相应处理。 - [使用EventHub进行数据通信](#使用eventhub进行数据通信):在基类Context中提供了EventHub对象,可以通过发布订阅方式来实现事件的传递。在事件传递前,订阅者需要先进行订阅,当发布者发布事件时,订阅者将接收到事件并进行相应处理。
- [使用globalThis进行数据同步](#使用globalthis进行数据同步):在ArkTS引擎实例内部,globalThis是一个全局对象,可以被ArkTS引擎实例内的UIAbility组件、ExtensionAbility组件和ArkUI页面(Page)访问。
- [使用AppStorage/LocalStorage进行数据同步](#使用appstorage/localstorage进行数据同步):ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。 - [使用AppStorage/LocalStorage进行数据同步](#使用appstorage/localstorage进行数据同步):ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。
...@@ -18,21 +17,23 @@ ...@@ -18,21 +17,23 @@
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
const TAG: string = '[Example].[Entry].[EntryAbility]'; const TAG: string = '[Example].[Entry].[EntryAbility]';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
func1(...data) { func1(data: string) {
// 触发事件,完成相应的业务操作 // 触发事件,完成相应的业务操作
console.info(TAG, '1. ' + JSON.stringify(data)); console.info(TAG, '1. ' + JSON.stringify(data));
} }
onCreate(want, launch) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
// 获取eventHub // 获取eventHub
let eventhub = this.context.eventHub; let eventhub = this.context.eventHub;
// 执行订阅操作 // 执行订阅操作
eventhub.on('event1', this.func1); eventhub.on('event1', this.func1);
eventhub.on('event1', (...data) => { eventhub.on('event1', (data: string) => {
// 触发事件,完成相应的业务操作 // 触发事件,完成相应的业务操作
console.info(TAG, '2. ' + JSON.stringify(data)); console.info(TAG, '2. ' + JSON.stringify(data));
}); });
...@@ -69,7 +70,7 @@ ...@@ -69,7 +70,7 @@
3. 在UIAbility的注册事件回调中可以得到对应的触发事件结果,运行日志结果如下所示。 3. 在UIAbility的注册事件回调中可以得到对应的触发事件结果,运行日志结果如下所示。
```ts ```json
[] []
[1] [1]
...@@ -84,229 +85,6 @@ ...@@ -84,229 +85,6 @@
this.context.eventHub.off('event1'); this.context.eventHub.off('event1');
``` ```
## 使用globalThis进行数据同步
globalThis是[ArkTS引擎实例](thread-model-stage.md)内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis对象进行数据同步。
**图1** 使用globalThis进行数据同步
![globalThis1](figures/globalThis1.png)
如上图所示,下面从如下三个场景和一个注意点来介绍globalThis的使用:
- [UIAbility和Page之间使用globalThis](#uiability和page之间使用globalthis)
- [UIAbility和UIAbility之间使用globalThis](#uiability和uiability之间使用globalthis)
- [UIAbility和ExtensionAbility之间使用globalThis](#uiability和extensionability之间使用globalthis)
- [globalThis使用的注意事项](#globalthis使用的注意事项)
### UIAbility和Page之间使用globalThis
通过在globalThis对象上绑定属性/方法,可以实现UIAbility组件与UI之间的数据同步。例如在UIAbility组件中绑定want参数,即可在UIAbility对应的UI上使用want参数信息。
1. 调用[`startAbility()`](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)方法启动一个UIAbility实例时,被启动的UIAbility创建完成后会进入[`onCreate()`](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityoncreate)生命周期回调,且在[`onCreate()`](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityoncreate)生命周期回调中能够接受到传递过来的want参数,可以将want参数绑定到globalThis上。
```ts
import UIAbility from '@ohos.app.ability.UIAbility';
export default class EntryAbility extends UIAbility {
onCreate(want, launch) {
globalThis.entryAbilityWant = want;
...
}
...
}
```
2. 在UI中即可通过globalThis获取到want参数信息。
```ts
let entryAbilityWant;
@Entry
@Component
struct Index {
aboutToAppear() {
entryAbilityWant = globalThis.entryAbilityWant;
}
// 页面展示
build() {
...
}
}
```
### UIAbility和UIAbility之间使用globalThis
在同一个应用中,UIAbility与UIAbility之间的数据传递可以通过将数据绑定到全局变量globalThis上进行同步。例如,在UIAbilityA中将数据保存在globalThis对象中,然后跳转到UIAbilityB中就可以获取该数据。
1. UIAbilityA中保存数据一个字符串数据并挂载到globalThis上。
```ts
import UIAbility from '@ohos.app.ability.UIAbility'
export default class UIAbilityA extends UIAbility {
onCreate(want, launch) {
globalThis.entryAbilityStr = 'UIAbilityA'; // UIAbilityA存放字符串“UIAbilityA”到globalThis
...
}
}
```
2. UIAbilityB中获取对应的数据。
```ts
import UIAbility from '@ohos.app.ability.UIAbility'
export default class UIAbilityB extends UIAbility {
onCreate(want, launch) {
// UIAbilityB从globalThis读取name并输出
console.info('name from entryAbilityStr: ' + globalThis.entryAbilityStr);
...
}
}
```
### UIAbility和ExtensionAbility之间使用globalThis
在同一个应用中,UIAbility和ExtensionAbility之间的数据传递也可以通过将数据绑定到全局变量globalThis上进行同步。例如,在UIAbilityA中保存数据,在ServiceExtensionAbility中就可以获取该数据。
1. UIAbilityA中保存数据一个字符串数据并挂载到globalThis上。
```ts
import UIAbility from '@ohos.app.ability.UIAbility'
export default class UIAbilityA extends UIAbility {
onCreate(want, launch) {
// UIAbilityA存放字符串“UIAbilityA”到globalThis
globalThis.entryAbilityStr = 'UIAbilityA';
...
}
}
```
2. ExtensionAbility中获取数据。
```ts
import Extension from '@ohos.app.ability.ServiceExtensionAbility'
export default class ServiceExtAbility extends Extension {
onCreate(want) {
// ServiceExtAbility从globalThis读取name并输出
console.info('name from entryAbilityStr: ' + globalThis.entryAbilityStr);
...
}
}
```
### globalThis使用的注意事项
**图2** globalThis注意事项
![globalThis2](figures/globalThis2.png)
- Stage模型下进程内的UIAbility组件共享ArkTS引擎实例,使用globalThis时需要避免存放相同名称的对象。例如UIAbilityA和UIAbilityB可以使用globalThis共享数据,在存放相同名称的对象时,先存放的对象会被后存放的对象覆盖。
- globalThis不支持跨进程使用,不同进程的UIAbility组件和ExtensionAbility组件无法使用globalThis共享数据,进程模型及进程间通信机制见[进程模型概述](./process-model-stage.md#进程模型概述)
- FA模型因为每个UIAbility组件之间引擎隔离,不会存在该问题。
- 对于绑定在globalThis上的对象,其生命周期与ArkTS虚拟机实例相同,建议在使用完成之后将其赋值为null,以减少对应用内存的占用。
Stage模型上同名对象覆盖导致问题的场景举例说明。
1. 在UIAbilityA文件中使用globalThis中存放了[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md)
```ts
import UIAbility from '@ohos.app.ability.UIAbility'
export default class UIAbilityA extends UIAbility {
onCreate(want, launch) {
globalThis.context = this.context; // UIAbilityA存放context到globalThis
...
}
}
```
2. 在UIAbilityA的页面中获取该[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md)并进行使用。使用完成后将UIAbilityA实例切换至后台。
```ts
@Entry
@Component
struct Index {
onPageShow() {
let ctx = globalThis.context; // 页面中从globalThis中取出context并使用
}
// 页面展示
build() {
...
}
}
```
3. 在UIAbilityB文件中使用globalThis中存放了[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md),并且命名为相同的名称。
```ts
import UIAbility from '@ohos.app.ability.UIAbility'
export default class UIAbilityB extends UIAbility {
onCreate(want, launch) {
// UIAbilityB覆盖了UIAbilityA在globalThis中存放的context
globalThis.context = this.context;
...
}
}
```
4. 在UIAbilityB的页面中获取该[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md)并进行使用。此时获取到的globalThis.context已经表示为UIAbilityB中赋值的[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md)内容。
```ts
@Entry
@Component
struct Index {
onPageShow() {
let ctx = globalThis.context; // Page中从globalThis中取出context并使用
}
// 页面展示
build() {
...
}
}
```
5. 在UIAbilityB实例切换至后台,将UIAbilityA实例从后台切换回到前台。此时UIAbilityA的onCreate生命周期不会再次进入。
```ts
import UIAbility from '@ohos.app.ability.UIAbility'
export default class UIAbilityA extends UIAbility {
onCreate(want, launch) { // UIAbilityA从后台进入前台,不会再走这个生命周期
globalThis.context = this.context;
...
}
}
```
6. 在UIAbilityA的页面再次回到前台时,其获取到的globalThis.context表示的为UIAbilityB的[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md),而不是UIAbilityA的[UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md),在UIAbilityA的页面中使用则会出错。
```ts
@Entry
@Component
struct Index {
onPageShow() {
let ctx = globalThis.context; // 这时候globalThis中的context是UIAbilityB的context
}
// 页面展示
build() {
...
}
}
```
## 使用AppStorage/LocalStorage进行数据同步 ## 使用AppStorage/LocalStorage进行数据同步
ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。使用这些方案可以方便地管理应用状态,提高应用性能和用户体验。其中,AppStorage是一个全局的状态管理器,适用于多个UIAbility共享同一状态数据的情况;而LocalStorage则是一个局部的状态管理器,适用于单个UIAbility内部使用的状态数据。通过这两种方案,开发者可以更加灵活地控制应用状态,提高应用的可维护性和可扩展性。详细请参见[应用级变量的状态管理](../quick-start/arkts-application-state-management-overview.md) ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。使用这些方案可以方便地管理应用状态,提高应用性能和用户体验。其中,AppStorage是一个全局的状态管理器,适用于多个UIAbility共享同一状态数据的情况;而LocalStorage则是一个局部的状态管理器,适用于单个UIAbility内部使用的状态数据。通过这两种方案,开发者可以更加灵活地控制应用状态,提高应用的可维护性和可扩展性。详细请参见[应用级变量的状态管理](../quick-start/arkts-application-state-management-overview.md)
...@@ -95,12 +95,16 @@ specified启动模式为指定实例模式,针对一些特殊场景使用( ...@@ -95,12 +95,16 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
```ts ```ts
// 在启动指定实例模式的UIAbility时,给每一个UIAbility实例配置一个独立的Key标识 // 在启动指定实例模式的UIAbility时,给每一个UIAbility实例配置一个独立的Key标识
// 例如在文档使用场景中,可以用文档路径作为Key标识 // 例如在文档使用场景中,可以用文档路径作为Key标识
import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
import { BusinessError } from '@ohos.base';
function getInstance() { function getInstance() {
... return 'key';
} }
let context = ...; // context为调用方UIAbility的UIAbilityContext let context:common.UIAbilityContext = ...; // context为调用方UIAbility的UIAbilityContext
let want = { let want: Want = {
deviceId: '', // deviceId为空表示本设备 deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.myapplication', bundleName: 'com.example.myapplication',
abilityName: 'SpecifiedAbility', abilityName: 'SpecifiedAbility',
...@@ -112,7 +116,7 @@ specified启动模式为指定实例模式,针对一些特殊场景使用( ...@@ -112,7 +116,7 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
context.startAbility(want).then(() => { context.startAbility(want).then(() => {
console.info('Succeeded in starting ability.'); console.info('Succeeded in starting ability.');
}).catch((err) => { }).catch((err: BusinessError) => {
console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`); console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
}) })
``` ```
...@@ -123,14 +127,17 @@ specified启动模式为指定实例模式,针对一些特殊场景使用( ...@@ -123,14 +127,17 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
```ts ```ts
import AbilityStage from '@ohos.app.ability.AbilityStage'; import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';
export default class MyAbilityStage extends AbilityStage { export default class MyAbilityStage extends AbilityStage {
onAcceptWant(want): string { onAcceptWant(want: Want): string {
// 在被调用方的AbilityStage中,针对启动模式为specified的UIAbility返回一个UIAbility实例对应的一个Key值 // 在被调用方的AbilityStage中,针对启动模式为specified的UIAbility返回一个UIAbility实例对应的一个Key值
// 当前示例指的是module1 Module的SpecifiedAbility // 当前示例指的是module1 Module的SpecifiedAbility
if (want.abilityName === 'SpecifiedAbility') { if (want.abilityName === 'SpecifiedAbility') {
// 返回的字符串Key标识为自定义拼接的字符串内容 // 返回的字符串Key标识为自定义拼接的字符串内容
return `SpecifiedAbilityInstance_${want.parameters.instanceKey}`; if (want.parameters) {
return `SpecifiedAbilityInstance_${want.parameters.instanceKey}`;
}
} }
return ''; return '';
......
...@@ -21,12 +21,14 @@ Create状态为在应用加载过程中,UIAbility实例创建完成时触发 ...@@ -21,12 +21,14 @@ Create状态为在应用加载过程中,UIAbility实例创建完成时触发
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
// 应用初始化 // 应用初始化
} }
... // ...
} }
``` ```
...@@ -46,7 +48,7 @@ import UIAbility from '@ohos.app.ability.UIAbility'; ...@@ -46,7 +48,7 @@ import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window'; import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
... // ...
onWindowStageCreate(windowStage: window.WindowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
// 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见)
...@@ -77,7 +79,7 @@ export default class EntryAbility extends UIAbility { ...@@ -77,7 +79,7 @@ export default class EntryAbility extends UIAbility {
// 设置UI加载 // 设置UI加载
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
... // ...
}); });
} }
} }
...@@ -93,23 +95,28 @@ export default class EntryAbility extends UIAbility { ...@@ -93,23 +95,28 @@ export default class EntryAbility extends UIAbility {
```ts ```ts
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 { BusinessError } from '@ohos.base';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
windowStage: window.WindowStage; windowStage: window.WindowStage | undefined = undefined;
... // ...
onWindowStageCreate(windowStage: window.WindowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
this.windowStage = windowStage; this.windowStage = windowStage;
... // ...
} }
onWindowStageDestroy() { onWindowStageDestroy() {
// 释放UI资源 // 释放UI资源
// 例如在onWindowStageDestroy()中注销获焦/失焦等WindowStage事件 // 例如在onWindowStageDestroy()中注销获焦/失焦等WindowStage事件
try { try {
this.windowStage.off('windowStageEvent'); if (this.windowStage) {
this.windowStage.off('windowStageEvent');
}
} catch (err) { } catch (err) {
console.error(`Failed to disable the listener for window stage event changes. Code is ${err.code}, message is ${err.message}`); let code = (err as BusinessError).code;
let message = (err as BusinessError).message;
console.error(`Failed to disable the listener for windowStageEvent. Code is ${code}, message is ${message}`);
}; };
} }
} }
...@@ -133,7 +140,7 @@ Foreground和Background状态分别在UIAbility实例切换至前台和切换至 ...@@ -133,7 +140,7 @@ Foreground和Background状态分别在UIAbility实例切换至前台和切换至
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
... // ...
onForeground() { onForeground() {
// 申请系统需要的资源,或者重新申请在onBackground()中释放的资源 // 申请系统需要的资源,或者重新申请在onBackground()中释放的资源
...@@ -157,7 +164,7 @@ Destroy状态在UIAbility实例销毁时触发。可以在onDestroy()回调中 ...@@ -157,7 +164,7 @@ Destroy状态在UIAbility实例销毁时触发。可以在onDestroy()回调中
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
... // ...
onDestroy() { onDestroy() {
// 系统资源的释放、数据的保存等 // 系统资源的释放、数据的保存等
......
...@@ -17,11 +17,11 @@ export default class EntryAbility extends UIAbility { ...@@ -17,11 +17,11 @@ 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
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
... // ...
}); });
} }
... // ...
} }
``` ```
...@@ -37,9 +37,11 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r ...@@ -37,9 +37,11 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
// 获取UIAbility实例的上下文 // 获取UIAbility实例的上下文
let context = this.context; let context = this.context;
... ...
...@@ -51,6 +53,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r ...@@ -51,6 +53,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r
```ts ```ts
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
@Entry @Entry
@Component @Component
...@@ -58,7 +61,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r ...@@ -58,7 +61,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r
private context = getContext(this) as common.UIAbilityContext; private context = getContext(this) as common.UIAbilityContext;
startAbilityTest() { startAbilityTest() {
let want = { let want: Want = {
// Want参数信息 // Want参数信息
}; };
this.context.startAbility(want); this.context.startAbility(want);
...@@ -76,6 +79,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r ...@@ -76,6 +79,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r
```ts ```ts
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import Want from '@ohos.app.ability.Want';
@Entry @Entry
@Component @Component
...@@ -83,7 +87,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r ...@@ -83,7 +87,7 @@ UIAbility类拥有自身的上下文信息,该信息为[UIAbilityContext](../r
startAbilityTest() { startAbilityTest() {
let context = getContext(this) as common.UIAbilityContext; let context = getContext(this) as common.UIAbilityContext;
let want = { let want: Want = {
// Want参数信息 // Want参数信息
}; };
context.startAbility(want); context.startAbility(want);
......
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
显式Want通常用于在当前应用中启动已知的目标应用组件,通过提供目标应用组件所在应用的Bundle名称信息(bundleName)并在Want对象内指定abilityName来启动目标应用组件。当有明确处理请求的对象时,显式Want是一种简单有效的启动目标应用组件的方式。 显式Want通常用于在当前应用中启动已知的目标应用组件,通过提供目标应用组件所在应用的Bundle名称信息(bundleName)并在Want对象内指定abilityName来启动目标应用组件。当有明确处理请求的对象时,显式Want是一种简单有效的启动目标应用组件的方式。
```ts ```ts
let wantInfo = { import Want from '@ohos.app.ability.Want';
let wantInfo: Want = {
deviceId: '', // deviceId为空表示本设备 deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.myapplication', bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility', abilityName: 'FuncAbility',
...@@ -31,7 +33,9 @@ ...@@ -31,7 +33,9 @@
```ts ```ts
let wantInfo = { import Want from '@ohos.app.ability.Want';
let wantInfo: Want = {
// uncomment line below if wish to implicitly query only in the specific bundle. // uncomment line below if wish to implicitly query only in the specific bundle.
// bundleName: 'com.example.myapplication', // bundleName: 'com.example.myapplication',
action: 'ohos.want.action.search', action: 'ohos.want.action.search',
......
...@@ -37,10 +37,12 @@ WindowExtensionAbility提供了onConnect()、onDisconnect()和onWindowReady()生 ...@@ -37,10 +37,12 @@ WindowExtensionAbility提供了onConnect()、onDisconnect()和onWindowReady()生
3. 打开WindowExtAbility.ts文件,导入WindowExtensionAbility的依赖包,自定义类继承WindowExtensionAbility并实现onWindowReady()、onConnect()和onDisconnect()生命周期回调。 3. 打开WindowExtAbility.ts文件,导入WindowExtensionAbility的依赖包,自定义类继承WindowExtensionAbility并实现onWindowReady()、onConnect()和onDisconnect()生命周期回调。
```ts ```ts
import Extension from '@ohos.application.WindowExtensionAbility' import Extension from '@ohos.application.WindowExtensionAbility'
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
export default class WindowExtAbility extends Extension { export default class WindowExtAbility extends Extension {
onWindowReady(window) { onWindowReady(window: window.Window) {
window.loadContent('WindowExtAbility/pages/index1').then(() => { window.loadContent('WindowExtAbility/pages/index1').then(() => {
window.getProperties().then((pro) => { window.getProperties().then((pro) => {
console.info("WindowExtension " + JSON.stringify(pro)); console.info("WindowExtension " + JSON.stringify(pro));
...@@ -49,11 +51,11 @@ WindowExtensionAbility提供了onConnect()、onDisconnect()和onWindowReady()生 ...@@ -49,11 +51,11 @@ WindowExtensionAbility提供了onConnect()、onDisconnect()和onWindowReady()生
}) })
} }
onConnect(want) { onConnect(want: Want) {
console.info('JSWindowExtension onConnect ' + want.abilityName); console.info('JSWindowExtension onConnect ' + want.abilityName);
} }
onDisconnect(want) { onDisconnect(want: Want) {
console.info('JSWindowExtension onDisconnect ' + want.abilityName); console.info('JSWindowExtension onDisconnect ' + want.abilityName);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册