0

「Bluetooth ヘッドセット」を発見してそのイベントを取得しようとしています。「CoreBluetooth」のドキュメントを読み、以下のサンプルコードを実装しました。デリゲート メソッド ' ' を起動しませんdidDiscoverPeripheral

これに対する解決策はありますか?

コード:

CBCentralManager *myCentralManager;
[myCentralManager scanForPeripheralsWithServices:nil options:nil];


-(void)centralManagerDidUpdateState:(CBCentralManager *)central{

    //following line prints CBCentralManagerStatePoweredOn

    NSLog(@"state:%@", [self getCentralManagerState:central.state]);
}


//following method does not fire

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{

}
4

2 に答える 2

2

CoreBluetooth.frameworkは Bluetooth Low-Energy 用です。
Bluetooth Low-Energy は、音 (ヘッドセット、スピーカーなど) を通過させるようには設計されていません。
私の質問は、ヘッドセットが Bluetooth Low-Energy を使用していることは確かですか?
私はそうは思わない。

そのため、デリゲート メソッドcentralManager:didDiscoverPeripheral:はトリガーされません。

「ユーザーが次の曲を押した」などのヘッドセットのイベントを取得したい場合は、Remote Control Eventsを使用できます。「その他のイベント」を聞きたいと思われるので、ヘッドセットが MFI になっていると思います。したがって、独自のプロトコルを持っている可能性があります。たとえば、お気に入りの番号に電話をかけるなど、他の機能を備えた Bluetooth ヘッドセット用の iOS アプリに取り組みまし

于 2014-05-21T07:21:16.677 に答える
2

前述のように、CoreBluetooth は LE デバイス専用である
ため、これはBluetoothHFPデバイスのイベント
を取得するために行ったことです: 1. AVAudioSeesion を開く必要があります:プロジェクトへの
リンク 2. 現在利用可能な入力:AVFoundation.framework

NSArray *availInputs = [[AVAudioSession sharedInstance] availableInputs];

3. ルート変更の通知について
: 新しいセットアップAVAudioSession
b.オブザーバーを登録するAVAudioSessionRouteChangeNotification

- (BOOL)prepareAudioSession {

    // deactivate session
    BOOL success = [[AVAudioSession sharedInstance] setActive:NO error: nil];
    if (!success) {
        NSLog(@"deactivationError");
    }

    // set audio session category AVAudioSessionCategoryPlayAndRecord options AVAudioSessionCategoryOptionAllowBluetooth
    success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil];
    if (!success) {
        NSLog(@"setCategoryError");
    }

    // activate audio session
    success = [[AVAudioSession sharedInstance] setActive:YES error: nil];
    if (!success) {
        NSLog(@"activationError");
    }

    return success;
}

変更のリッスンを開始するときにこれを呼び出します。

[self prepareAudioSession];

NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
                  selector:@selector(bluetoothAvailabilityDidChange:)
                      name:@"BluetoothConnectabilityChangedNotification"
                    object:nil];
  1. バックグラウンドでコールバックを取得したい場合は、オーディオと AirPlay をターゲットの機能に追加する必要があります。
    ここに画像の説明を入力

!! この回答は、解決策が得られたときに役に立ちました

于 2015-03-31T11:49:57.020 に答える