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