如何解决无法通过信标广告取消注册Advertisement
我正在使用BlueZ和Python来实现蓝牙服务。我们要求能够启用和禁用服务和信标。这个想法是,我们听一些MQTT消息。如果消息是启用或禁用服务/信标,我们将调用该函数以启用或禁用它。 这是广告的代码:
class BluetoothAdvert(Advertisement):
def __init__(self,bus,index,name,MacAddress):
Advertisement.__init__(self,'peripheral')
if 0 == index:
self.add_service_uuid('1234')
self.add_manufacturer_data(0x1234,'123456789012')
elif 1 == index:
frame_type = [0x00]
power = [0x00]
id = [0x25,0x33,0x96,0x2B,0x17,0xCD,0xA2,0x53,0x77,0x98,0x22,0x2A,0x89,0x12,0x36,0xF5]
beacon_data = frame_type + power + id
self.add_service_uuid('FEAA')
self.add_service_data('FEAA',beacon_data)
以下是启用/禁用蓝牙服务和信标广告的代码:
def enableBluetoothService():
service_manager.RegisterApplication(
bluetooth_service.get_path(),{},reply_handler=reg_callback,error_handler=reg_error_callback)
advert_manager.RegisterAdvertisement(
bluetooth_advert.get_path(),error_handler=reg_error_callback)
def disableBluetoothService():
service_manager.UnregisterApplication(
bluetooth_service.get_path(),reply_handler=unreg_callback_func,error_handler=unreg_error_callback)
advert_manager.UnregisterAdvertisement(bluetooth_advert)
def enableBeacon():
advert_manager.RegisterAdvertisement(
beacon_advert.get_path(),reply_handler=reg_advert_callback,error_handler=reg_advert_error_callback)
def disableBeacon():
advert_manager.UnregisterAdvertisement(beacon_advert)
这是主要功能:
def main():
'''
Other code ...
'''
service_manager.RegisterApplication(
bluetooth_service.get_path(),error_handler=reg_error_callback)
bluetooth_advert = BluetoothAdvert(bus,0)
beacon_advert = BluetoothAdvert(bus,1)
advert_manager.RegisterAdvertisement(
bluetooth_advert.get_path(),error_handler=reg_advert_error_callback)
advert_manager.RegisterAdvertisement(
beacon_advert.get_path(),error_handler=reg_advert_error_callback)
'''
Other code ...
'''
对于测试,似乎我们可以多次调用enableBluetoothService()和disableBluetoothService()。蓝牙服务将被启用或禁用。通过多次调用enableBluetoothService()和disableBluetoothService()是否有任何问题?
通过调用一些数据的UnregisterAdvertisement()似乎可以。但是我们不能先调用disableBeacon()然后再调用enableBeacon()。否则,我们将收到“无法注册广告:org.bluez.Error.AlreadyExists:已经存在”。为什么我们不能将Beacon广告称为UnregisterAdvertisement()?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。