1# @ohos.app.ability.FenceExtensionAbility (FenceExtensionAbility)
2
3FenceExtensionAbility为开发者提供的地理围栏相关的能力,继承自ExtensionAbility。
4
5> **说明:**
6>
7> 本模块首批接口从API version 14开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8> 本模块接口仅可在Stage模型下使用。
9
10## 导入模块
11
12```ts
13import FenceExtensionAbility from '@kit.LocationKit';
14```
15
16## 属性
17
18**系统能力**:SystemCapability.Location.Location.Geofence
19
20| 名称 | 类型 | 可读 | 可写 | 说明 |
21| -------- | -------- | -------- | -------- | -------- |
22| context | FenceExtensionContext | 是 | 否 | 围栏服务上下文。 |
23
24## FenceExtensionAbility.onFenceStatusChange
25
26onFenceStatusChange(transition: geoLocationManager.GeofenceTransition, additions: Record<string, string>): void;
27
28接收系统通知的地理围栏事件,根据围栏事件类型和数据进行相应处理。
29
30**系统能力**:SystemCapability.Location.Location.Geofence
31
32**参数:**
33| 参数名 |  类型 | 必填  | 说明  |
34| ------------ | ------------ | ------------ | ------------ |
35|  transition |  [geoLocationManager.GeofenceTransition](js-apis-geoLocationManager.md#geofencetransition12) |  是 | 地理围栏事件信息;包含地理围栏ID和具体的地理围栏事件。  |
36| additions  | Record<string, string>  | 是  | 附加信息  |
37
38**示例:**
39
40```ts
41import { FenceExtensionAbility, geoLocationManager } from '@kit.LocationKit';
42import { notificationManager } from '@kit.NotificationKit';
43import { wantAgent } from '@kit.AbilityKit';
44
45export default class MyFenceExtensionAbility extends FenceExtensionAbility {
46  async onFenceStatusChange(transition: geoLocationManager.GeofenceTransition,
47    additions: Record<string, string>): void {
48    // 接受围栏状态变化事件,处理业务逻辑
49    hilog.info(0x0000, "TAG",
50      `on geofence transition,id:${transition.geofenceId},event:${transition.transitionEvent},additions:${JSON.stringify(additions)}`);
51
52    // 可以发送围栏业务通知
53    let wantAgentInfo: wantAgent.WantAgentInfo = {
54      wants: [
55        {
56          bundleName: 'com.example.myapplication',
57          abilityName: 'EntryAbility',
58          parameters:
59          {
60            "geofenceId": transition?.geofenceId,
61            "transitionEvent": transition?.transitionEvent,
62          }
63        } as Want
64      ],
65      actionType: wantAgent.OperationType.START_ABILITY,
66      requestCode: 100
67    };
68    let wantAgentMy = await wantAgent.getWantAgent(wantAgentInfo);
69    let notificationRequest: notificationManager.NotificationRequest = {
70      id: 1,
71      content: {
72        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
73        normal: {
74          title: `围栏通知`,
75          text: `on geofence transition,id:${transition.geofenceId},event:${transition.transitionEvent},additions:${JSON.stringify(additions)}`,
76        }
77      },
78      notificationSlotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,
79      wantAgent: wantAgentMy
80    };
81    notificationManager.publish(notificationRequest);
82  }
83}
84
85```
86## FenceExtensionAbility.onDestroy
87
88onDestroy(): void;
89
90接收FenceExtensionAbility的销毁事件并处理,会在FenceExtensionAbility销毁前回调。
91
92**系统能力**:SystemCapability.Location.Location.Geofence
93
94**示例:**
95
96```ts
97import { FenceExtensionAbility } from '@kit.LocationKit';
98
99class MyFenceExtensionAbility extends FenceExtensionAbility {
100  onDestroy(): void {
101    // 处理ability销毁事件
102    hilog.info(0x0000, "TAG", `on ability destroy`);
103  }
104}
105
106```