看来这个问题在这里得到了"回答" ,但是如果没有任何代码来表明他们做了什么不同的话我就不得不提出一个新问题.
我有自己的代码具有相同的行为,在OS X上使用Core Bluetooth的CBCentralManager扫描特定的CBUUID并没有发现一个iOS设备充当CBPeripheralManager的外围设备(除非它及其服务先前已被发现).为了查看代码中是否有问题,我下载了Apple的示例代码.在两个iOS设备上运行示例代码按预期工作,但是在将CBCentralManager代码复制到OS X应用程序时,它无法找到iOS设备.
我已经为OS X应用程序上传了一个Xcode项目,它在WikiUpload上托管,因为它似乎是最不狡猾的.如果人们愿意,我的主机上还有一份副本.
这是OS X项目中的AppDelegate.m代码(CoreBluetooth框架在项目中链接):
#import <CoreBluetooth/CoreBluetooth.h>
@interface AppDelegate () <CBCentralManagerDelegate, CBPeripheralDelegate>
@property (strong, nonatomic) CBCentralManager *centralManager;
@property (strong, nonatomic) CBPeripheral *discoveredPeripheral;
@property (strong, nonatomic) NSMutableData *data;
@property (weak) IBOutlet NSWindow *window;
@end
@implementation AppDelegate
@synthesize centralManager = _centralManager, discoveredPeripheral = _discoveredPeripheral, data = _data;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
// Start up the CBCentralManager
_centralManager …
Run Code Online (Sandbox Code Playgroud) 来自iOS开发背景,当使用蓝牙LE充当外围设备时,您可以在"中央"BLE设备订阅(启用通知)特征时注册回调.
我很难看到如何在Android上实现这一目标.如果您正在使用蓝牙LE作为中心,我可以看到您的订阅方式:
bluetoothGatt.setCharacteristicNotification(characteristicToSubscribeTo, true);
在iOS上与此相同:
peripheralDevice.setNotifyValue(true, forCharacteristic characteristicToSubscribeTo)
现在,在iOS上调用上面的内容之后,在外围设备上你会得到一个回调,说中央已经订阅了一个类似于的方法:
peripheralManager(manager, central subscribedCentral didSubscribeToCharacteristic characteristic)
然后它会给你一个对订阅/启用通知的设备和什么特性的引用.
什么是Android上的等价物?
为了清楚起见,我将指出我不需要在Android上订阅特性,该设备充当外围设备,并且需要在其他设备订阅特性时得到通知.
很抱歉,如果这很明显,但我无法在文档或其他地方找到它.