ios - 在没有 CABTMIDILocalPeripheralViewController 的情况下手动在 iOS 上宣传蓝牙 MIDI

标签 ios bluetooth bluetooth-lowenergy ios9 coremidi

我刚刚发现适用于 iOS 的 CABTMIDILocalPeripheralViewController 处理用于启用蓝牙 MIDI 可发现性的用户设置。这是 很好,但为了将蓝牙集成到我应用程序的其余部分 网络 MIDI 连接最好能够处理 直接从我的应用程序代码启用,而不是依赖这个不透明的 VC。 有谁知道这是否可能?

最佳答案

没有公共(public) API 来管理此功能。在使用 Instruments 进行调查后,开关似乎导致了 CBPeripheralManager 的实例化。我假设它将设备设置为蓝牙外围设备,并手动将数据传入和传出同样已创建的 MIDIEndpointRef

换句话说,没有单线解决方案。如果我沿着这条路走得更远,我会发布代码,除非其他人想试一试......

更新

神奇代码...

- (instancetype)init
{
    self = [super init];
    if (self) {
        _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    }
    return self;
}

//---------------------------------------------------------------------

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
    if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
        return;
    }

    info(@"_peripheralManager powered on.");

//    CBMutableCharacteristic *tx = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:RBL_TX_UUID] properties:CBCharacteristicPropertyWriteWithoutResponse value:nil permissions:CBAttributePermissionsWriteable];
//    
    rx = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"7772E5DB-3868-4112-A1A9-F2669D106BF3"] properties:CBCharacteristicPropertyRead|CBCharacteristicPropertyWriteWithoutResponse|CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];

    CBMutableService *s = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"03B80E5A-EDE8-4B33-A751-6CE34EC4C700"] primary:YES];
    s.characteristics = @[rx];

    [_peripheralManager addService:s];

    NSDictionary *advertisingData = @{CBAdvertisementDataLocalNameKey : BLE_NAME, CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:@"03B80E5A-EDE8-4B33-A751-6CE34EC4C700"]]};
    [_peripheralManager startAdvertising:advertisingData];
}

正是这些 ID 定义了 MIDI 外围设备。更多信息:

Apple 曾经有一个文档在

...不再是了。我很想找到一份旧副本,因为事实证明接收器代码(模拟 CABTMIDICentralViewController)更难破解...

关于ios - 在没有 CABTMIDILocalPeripheralViewController 的情况下手动在 iOS 上宣传蓝牙 MIDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957448/

相关文章:

java - 从 InputStream 读取数据包 - 正确的设计

bluetooth - 获取Android手机支持的蓝牙版本?(5或4.x)

ios - 使用蓝牙 LE GATT 配置文件可实现的最大轮询频率?

iOS 蓝牙不发现设备

ios - 是否需要开发者帐户才能打开 Xcode 中的功能?

objective-c - 选择 RowAtIndexPath : animated: scrollPosition: - Row is "selected"

ios - iOS 上的 VLCKit 在播放流媒体时没有 fps

iphone - 从后台获取位置时 Location.Horizo​​ntalAccuracy 太差

android - 如何在运行时更新 Android BLE Advertiser 服务数据?

ios - 使用响应写入多个低功耗蓝牙特征值