zoukankan      html  css  js  c++  java
  • IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果

    今下午项目中使用到了 扬声器和听筒的设置,我项目中是这样的,有一个聊天设置,聊天设置有一个使用扬声器 播放声音的设置。

    这个设置是,当你打开那个开关的话,你在聊天中都可以根据你的使用来任意的播放声音,今下午在网上查了一下,好多都是那几行代码,基本上都是复制同一个人的,搞的我拷贝他们的代码,竟然用不了,需要修改,我就进行了修改,运用到了我的项目中来,我的代码是这样的,我的代码中,有一个设置是判断那个开关是否打开,如果打开的状态我就是扩音器播放,没打开就是话筒播放,因为我开关是一个button按钮,所以我的判断是判断他 是0 或者 是1了。。

     1 #pragma mark ----声音的播放
     2 -(void)Playthevoice:(UIButton *)btn
     3 {
     4     self.voiceData=[NSData dataWithContentsOfFile:_wavfilePath];
     5     if ([self.delegate respondsToSelector:@selector(returnselfcell:)]) {
     6         [self.delegate returnselfcell:self];
     7     }
     8     
     9     NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults];
    10     NSString *isMessage=[userdefault objectForKey:@"isSpeaker_Set"];
    11     if ([isMessage isEqualToString:@"1"]) {
    12         
    13         //初始化播放器的时候如下设置
    14         UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    15         AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
    16                                 sizeof(sessionCategory),
    17                                 &sessionCategory);
    18         
    19         UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
    20         AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,
    21                                  sizeof (audioRouteOverride),
    22                                  &audioRouteOverride);
    23         
    24         AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    25         //默认情况下扬声器播放
    26         [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
    27         [audioSession setActive:YES error:nil];
    28 
    29         [self SensorNotification:YES];
    30 
    31     }else if ([isMessage isEqualToString:@"0"])
    32     {
    33 
    34         [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    35 
    36     }
    37 }

    在下面我首先我先注册了一个监听的通知,这里我用了网上的方法,设置了如果你靠在耳朵上听的话,屏幕就会变暗,和拨打电话一样的处理,如果我的设置那里的布尔值为YES,则会来调用这个通知。这个通知就会来调用我的这个扩音器播放的这个方法。这个方法是我上面的 
    Playthevoice 方法里面的调用

      [self SensorNotification:YES]; 

     1 #pragma mark - 监听听筒or扬声器
     2 - (void) SensorNotification:(BOOL)state
     3 {
     4     [[UIDevice currentDevice] setProximityMonitoringEnabled:state]; //建议在播放之前设置yes,播放结束设置NO,这个功能是开启红外感应
     5     
     6     if(state)//添加监听
     7         [[NSNotificationCenter defaultCenter] addObserver:self
     8                                                  selector:@selector(sensorVoiceStateChange:) name:@"UIDeviceProximityStateDidChangeNotification"
     9                                                    object:nil];
    10     else//移除监听
    11         [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
    12 }
    13 
    14 //处理监听触发事件
    15 -(void)sensorVoiceStateChange:(NSNotificationCenter *)notification;
    16 {
    17     //如果此时手机靠近面部放在耳朵旁,那么声音将通过听筒输出,并将屏幕变暗(就为省一点电啊,可以让你勾搭妹纸了。哈哈)
    18     if ([[UIDevice currentDevice] proximityState] == YES)
    19     {
    20         NSLog(@"Device is close to user");
    21         [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    22     }
    23     else
    24     {
    25         NSLog(@"Device is not close to user");
    26         [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    27     }
    28 }

    基本上就是这些了,逻辑就是 你按钮那里触发了,扩音器播放,然后你的那个代理那里就会来执行这个扩音器播放的这个方法。然后根据你的这个判断来进行设置扩音器或者听筒了。。。

  • 相关阅读:
    Linux常用命令
    安装最新版的wampserver,可以兼容php5和php7
    PHP程序员的技术成长规划
    ztreeSearch
    xmlUtil 解析 创建
    EXCEL 读取
    线程池 Future 带返回结果
    cxf 创建动态webService
    Map 和 javaBean转换
    线程池 http请求
  • 原文地址:https://www.cnblogs.com/Wild-orangutans/p/4445037.html
Copyright © 2011-2022 走看看