3

Я видел некоторые приложения, такие как WhatsApp имеет функцию воспроизведения аудиоклипов только через динамик (динамик телефонных разговоров), когда пользователь поднимает устройство рядом с ухом. В противном случае его воспроизведение осуществляется через обычный встроенный динамик.Как воспроизводить звук через встроенный динамик динамика

Я использую MPMoviePlayer для воспроизведения аудиоклипов.

У меня было много похожих вопросов и ответов в Интернете, и все ответы говорят, чтобы установить категорию AudioSession в PlayAndRecord. Это оно.

Я сделал то же самое, но не смог получить точный результат, который я хочу получить.

// Audio Player 
self.audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
[audioSession setActive:YES error:nil]; 
self.moviePlayer = [[MPMoviePlayerController alloc] init]; 
self.moviePlayer.view.hidden = YES; 

// AVAudioSessionPortDescription *routePort = self.audioSession.currentRoute.outputs.firstObject; 
// NSString *portType = routePort.portType; 
//  
// if ([portType isEqualToString:@"Receiver"]) { 
//  [self.audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; 
// } else { 
//  [self.audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil]; 
// } 

Может кто-нибудь пожалуйста, покажите мне, где и как я могу изменить источник воспроизведения звука через динамик наушника только тогда, когда пользователь поднимает устройство?

+0

Вот один я последовал. Но не работает для меня. См. Отредактированный вопрос, я опубликовал полный исходный код – sajaz

+0

Я мог бы решить его с помощью AVAudioSession и ProximityMonitering. Я отправил ответ – sajaz

ответ

5

я мог бы сделать это с помощью AVAudioSession и ProximityMonitering

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [UIDevice currentDevice].proximityMonitoringEnabled = YES; 

    if ([UIDevice currentDevice].proximityMonitoringEnabled == YES) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(proximityChanged:) 
                name:@"UIDeviceProximityStateDidChangeNotification" 
               object:[UIDevice currentDevice]]; 
    } 
} 


- (void) proximityChanged:(NSNotification *)notification { 
    UIDevice *device = [notification object]; 
    NSLog(@"In proximity: %i", device.proximityState); 

    if(device.proximityState == 0){ 
     [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; 
    } 
    else{ 
     [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil]; 
    } 
} 

Play Audio

audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
[audioSession setActive:YES error:nil]; 

AVAudioSessionPortDescription *routePort = audioSession.currentRoute.outputs.firstObject; 
NSString *portType = routePort.portType; 

NSLog(@"PortType %@", portType); 

if ([portType isEqualToString:@"Receiver"]) { 
    [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; 
} 
+0

, можете ли вы это проверить? https://stackoverflow.com/questions/45424446/avaudiosession-playing-audio-through-earpiece-speaker – Shohrab