MSc*_*uer 16 iphone bluetooth objective-c ios bluetooth-lowenergy
我正在编写一个iOS应用程序来与BLE设备通信.设备可以在连接之间更改名称(不是在BLE连接期间),但iOS拒绝更改设备名称.
例如:我可以在名称为SadName时连接到设备.我断开它,关闭应用程序等,并将设备的名称更改为HappyName.但是,当我扫描设备时,iOS仍然将外围设备名称显示为SadName.
如果我调试应用程序并查看:
(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
Run Code Online (Sandbox Code Playgroud)
peripheral.name的值是SadName所以我不认为这是我在代码中错误解释的东西.我应该提一下,当我扫描设备时,我的代码是:
[self.CM scanForPeripheralsWithServices:nil options:0]; // Start scanning
Run Code Online (Sandbox Code Playgroud)
我猜这只是因为设备UUID是相同的,所以iOS从它的缓存设备列表中提取它,但我想覆盖它.
思考?对不起,我是iOS新手.干杯 - MSchmidtbauer
Abr*_*row 24
iOS SDK的CoreBluetooth API不提供强制刷新外围设备名称的方法.
目前,当BLE设备中的设备名称发生变化时,在iOS中使用peripheral.name是不可行的.
Apple建议通过指定传递给scanForPeripheralsWithServices的CBUUID对象(包含一个或多个服务UUID)列表来扫描特定设备:
NSArray *services = @[[CBUUID UUIDWithString: @"2456e1b9-26e2-8f83-e744-f34f01e9d701"] ]; // change to your service UUID!
NSDictionary *dictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:1] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
[self.manager scanForPeripheralsWithServices:services options:dictionary];
Run Code Online (Sandbox Code Playgroud)
这减少了didDiscoverPeripheral的调用次数.不要只将nil传递给scanForPeripheralsWithServices.它还允许您的应用在处于后台状态时扫描外围设备.
如果您正在寻找在建立连接之前广播可用信息的方法,则可以使用" 播发"或"扫描响应数据".外围设备可以配置为广播称为本地名称和制造商特定数据的条目.这些数据在didDiscoverPeripheral中可用:
- (void)centralManager: (CBCentralManager *)central
didDiscoverPeripheral: (CBPeripheral *)peripheral
advertisementData: (NSDictionary *)advertisementData
RSSI: (NSNumber *)RSSI {
NSString *localName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];
NSData *manufacturerData = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
NSLog(@"Local: name: %@", localName);
NSLog(@"Manufact. Data: %@", [manufacturerData description]);
}
Run Code Online (Sandbox Code Playgroud)
本地名称是NSString,因此在此字段中仅在BLE设备上写入可打印字符.制造商数据是一个NSData,它可以包含任何字节值,因此您甚至可以在此处获得二进制数据.
根据您使用的BLE设备,本地名称和制造商特定数据的长度是有限的.
在我的BLE设备上,我可以使用广告数据发送128位服务UUID和8字符本地名称.制造商特定数据进入扫描响应数据,可以是29个字节长.
使用Adv./Scan响应数据的好处是,它可以在没有电源循环的情况下在此BLE设备上进行更改.
建议:
| 归档时间: |
|
| 查看次数: |
10687 次 |
| 最近记录: |