1# @ohos.app.ability.FenceExtensionAbility (FenceExtensionAbility)
2
3The **FenceExtensionAbility** class provides geofence-related capabilities. It is inherited from the **ExtensionAbility** class.
4
5> **NOTE**
6>
7> The initial APIs of this module are supported since API version 14. Newly added APIs will be marked with a superscript to indicate their earliest API version.
8> The APIs of this module can be used only in the stage model.
9
10## Modules to Import
11
12```ts
13import FenceExtensionAbility from '@kit.LocationKit';
14```
15
16## Attributes
17
18**System capability**: SystemCapability.Location.Location.Geofence
19
20| Name| Type| Readable| Writable| Description|
21| -------- | -------- | -------- | -------- | -------- |
22| context | [FenceExtensionContext](js-apis-app-ability-FenceExtensionContext-sys.md) | Yes| No| Context of the Geofence service.|
23
24## FenceExtensionAbility.onFenceStatusChange
25
26onFenceStatusChange(transition: geoLocationManager.GeofenceTransition, additions: Record<string, string>): void;
27
28Represents the callback triggered when a geofence status change event is received. Service processing is then performed based on the event type and data.
29
30**System capability**: SystemCapability.Location.Location.Geofence
31
32**Parameters**
33| Name|  Type| Mandatory | Description |
34| ------------ | ------------ | ------------ | ------------ |
35|  transition |  [geoLocationManager.GeofenceTransition](js-apis-geoLocationManager.md#geofencetransition12) |  Yes| Geofence transition information, including the geofence ID and geofence event. |
36| additions  | Record<string, string>  | Yes | Additional information. |
37
38**Example**
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    // Receive the geofence status change event and process the service logic.
49    hilog.info(0x0000, "TAG",
50      `on geofence transition,id:${transition.geofenceId},event:${transition.transitionEvent},additions:${JSON.stringify(additions)}`);
51
52    // Send a geofence notification.
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: "Geofence Notification",
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
90Represents the callback triggered when a **FenceExtensionAbility** destruction event is received.
91
92**System capability**: SystemCapability.Location.Location.Geofence
93
94**Example**
95
96```ts
97import { FenceExtensionAbility } from '@kit.LocationKit';
98
99class MyFenceExtensionAbility extends FenceExtensionAbility {
100  onDestroy(): void {
101    // Process the FenceExtensionAbility destruction event.
102    hilog.info(0x0000, "TAG", `on ability destroy`);
103  }
104}
105
106```
107