1# 创建ServiceAbility 2 3 41. 创建ServiceAbility。 5 6 通过DevEco Studio开发平台创建ServiceAbility时,DevEco Studio会默认生成onStart、onStop、onCommand方法,其他方法需要开发者自行实现,接口说明参见前述章节。开发者也可以添加其他Ability请求与ServiceAbility交互时的处理方法,示例如下: 7 8 ```ts 9 import { Want } from '@kit.AbilityKit'; 10 import { rpc } from '@kit.IPCKit'; 11 import { hilog } from '@kit.PerformanceAnalysisKit'; 12 13 const TAG: string = '[Sample_FAModelAbilityDevelop]'; 14 const domain: number = 0xFF00; 15 16 class FirstServiceAbilityStub extends rpc.RemoteObject { 17 constructor(des: Object) { 18 if (typeof des === 'string') { 19 super(des); 20 } else { 21 return; 22 } 23 } 24 25 onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption): boolean { 26 hilog.info(domain, TAG, 'ServiceAbility onRemoteRequest called'); 27 if (code === 1) { 28 let string = data.readString(); 29 hilog.info(domain, TAG, `ServiceAbility string=${string}`); 30 let result = Array.from(string).sort().join(''); 31 hilog.info(domain, TAG, `ServiceAbility result=${result}`); 32 reply.writeString(result); 33 } else { 34 hilog.info(domain, TAG, 'ServiceAbility unknown request code'); 35 } 36 return true; 37 } 38 } 39 40 class ServiceAbility { 41 onStart(): void { 42 hilog.info(domain, TAG, 'ServiceAbility onStart'); 43 } 44 45 onStop(): void { 46 hilog.info(domain, TAG, 'ServiceAbility onStop'); 47 } 48 49 onCommand(want: Want, startId: number): void { 50 hilog.info(domain, TAG, 'ServiceAbility onCommand'); 51 } 52 53 onConnect(want: Want): rpc.RemoteObject { 54 hilog.info(domain, TAG, 'ServiceAbility onDisconnect' + want); 55 return new FirstServiceAbilityStub('test'); 56 } 57 58 onDisconnect(want: Want): void { 59 hilog.info(domain, TAG, 'ServiceAbility onDisconnect' + want); 60 } 61 } 62 63 export default new ServiceAbility(); 64 ``` 65 662. 注册ServiceAbility。 67 68 ServiceAbility需要在应用配置文件config.json中进行注册,注册类型type需要设置为service。"visible"属性表示ServiceAbility是否可以被其他应用调用,true表示可以被其他应用调用,false表示不能被其他应用调用(仅应用内可以调用)。若ServiceAbility需要被其他应用调用,注册ServiceAbility时需要设置"visible"为true,同时需要设置支持关联启动。ServiceAbility的启动规则详见[组件启动规则](component-startup-rules.md)章节。 69 70 ```json 71 { 72 ... 73 "module": { 74 ... 75 "abilities": [ 76 ... 77 { 78 "name": ".ServiceAbility", 79 "srcLanguage": "ets", 80 "srcPath": "ServiceAbility", 81 "icon": "$media:icon", 82 "description": "$string:ServiceAbility_desc", 83 "type": "service", 84 "visible": true 85 }, 86 ... 87 ] 88 ... 89 } 90 } 91 ``` 92 93