@@ -104,6 +104,10 @@ def __init__(
104104 self ._duration = duration
105105 self .releaseCallback = releaseCallback
106106
107+ self ._exportBus : Optional [MessageBus ] = None
108+ self ._exportPath : Optional [str ] = None
109+ self ._adapter : Optional [Adapter ] = None
110+
107111 super ().__init__ (self ._INTERFACE )
108112
109113 async def register (
@@ -135,10 +139,25 @@ async def register(
135139 if adapter is None :
136140 adapter = await Adapter .get_first (bus )
137141
142+ self ._adapter = adapter
143+
138144 # Get the LEAdvertisingManager1 interface for the target adapter.
139145 interface = adapter ._proxy .get_interface (self ._MANAGER_INTERFACE )
140146 await interface .call_register_advertisement (path , {})
141147
148+ async def unregister (self ):
149+ """
150+ Unregister this advertisement from bluez to stop advertising.
151+ """
152+ if not self ._exportBus or not self ._adapter or not self ._exportPath :
153+ return
154+
155+ interface = self ._adapter ._proxy .get_interface (self ._MANAGER_INTERFACE )
156+
157+ await interface .call_unregister_advertisement (self ._exportPath )
158+
159+ self .Release ()
160+
142161 @classmethod
143162 async def GetSupportedIncludes (cls , adapter : Adapter ) -> AdvertisingIncludes :
144163 interface = adapter ._proxy .get_interface (cls ._MANAGER_INTERFACE )
@@ -154,6 +173,10 @@ async def GetSupportedIncludes(cls, adapter: Adapter) -> AdvertisingIncludes:
154173 def Release (self ): # type: ignore
155174 self ._exportBus .unexport (self ._exportPath , self ._INTERFACE )
156175
176+ self ._exportBus = None
177+ self ._adapter = None
178+ self ._exportPath = None
179+
157180 if self .releaseCallback is not None :
158181 self .releaseCallback ()
159182
0 commit comments