1

私のアプリでは、オーディオを録音してこのオーディオを再生し、このオーディオを耳の近くで再生するときに近接を追加する必要があるため、再生ボタンのクリック時に次のコードを実行する必要があります。

- (IBAction)btnPlayPauseTapped:(id)sender {
    UIDevice *device = [UIDevice currentDevice];
    [device setProximityMonitoringEnabled: YES];
    if (device.proximityMonitoringEnabled == YES) {
        [[NSNotificationCenter defaultCenter] removeObserver:APP_DELEGATE name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:APP_DELEGATE selector:@selector(proximityChanged:) name:@"UIDeviceProximityStateDidChangeNotification" object:device];
//other code 
    }

近接が有効な場合、通知はこのメソッドを呼び出します。

- (void) proximityChanged:(NSNotification *)notification {
    NSLog(@"proximity changed called");
    UIDevice *device = [notification object];
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    if(device.proximityState == 1){
        [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
        [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
        [audioSession setActive:YES error:nil];
    }
    else{
        [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
        [audioSession  overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
        [audioSession setActive:YES error:nil];

    }
}

プレーヤーが再生を停止または一時停止したときに、これを追加します。

UIDevice *device = [UIDevice currentDevice];
[device setProximityMonitoringEnabled: NO];

しかし、再びオーディオの再生を開始し、デバイスを耳の近くに置くと、通知メソッド (proximityChanged) が呼び出され、その時点で近接状態も 1 になり、オーディオ セッション カテゴリも playandrecord として設定されましたが、このオーディオは耳のスピーカーで再生されませんでした。メインスピーカーでオーディオを再生します。

これで私を助けてください。

前もって感謝します。

4

1 に答える 1

0

近接を無効にしたときにプレイヤーがプレイヤーを停止したときの問題は2日後に解決しましたが、proximitychangeメソッドでaudiosessionカテゴリを変更しました。

  - (void) proximityChanged:(NSNotification *)notification {
    UIDevice *device = [notification object];
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    BOOL success;
     success = [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    if(device.proximityState == 1){
        NSLog(@"bool %s", success ? "true" : "false");
        [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
        [audioSession setActive:YES error:nil];
    }
    else{
         NSLog(@"bool %s", success ? "true" : "false");
        [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
        [audioSession setActive:YES error:nil];

    }
于 2015-10-19T10:35:56.583 に答える