iOS 音量键事件

最近在一个项目里遇到了一个需要对手机侧边音量调节键进行操作的需求,所以稍微研究了一下,下面是研究的一些成果,可能有不足大家可以评论说一下:
首先:
要对音量键进行监听
// 监听音量控制
       [[ NSNotificationCenter  defaultCenter ]  addObserver : self  selector : @selector (volumeClicked:) name : @"AVSystemController_SystemVolumeDidChangeNotification"  object : nil ];
但是仅仅监听是不起作用的,因为 @"AVSystemController_SystemVolumeDidChangeNotification"需要对它进行响应,所以要在监听后加
[[ UIApplication  sharedApplication ]  beginReceivingRemoteControlEvents ];
*******************************************************************************************
当然在离开页面时记得注销监听,并且取消响应
[[ NSNotificationCenter  defaultCenter ]  removeObserver : self name : @"AVSystemController_SystemVolumeDidChangeNotification"  object : nil ];
       [[ UIApplication  sharedApplication ]  endReceivingRemoteControlEvents ];
这是第一步就已经完成了,在

//监听方法

-(void)volumeClicked:(NSNotification *)noti{

    //在这里我们就可以实现对音量键进行监听,完成响应的操作。noti中也有一些相关的信息可以看看

}

到这里还没有结束,因为你会发现当你按下音量键时,会弹出音量的提示框,很印象app的视觉,因为我们要想办法把它去除掉。

因此接下来就是把提示框去掉的操作。

首先

//强制打开声音

        AVAudioSession *audio = [AVAudioSession sharedInstance];

 

       [audio setActive:YES error:nil];

为什么要强制打开,后面会说。

然后就是用自定义的提示框去顶替系统的提示框

    MPVolumeView *volumeView = [[MPVolumeView alloc]initWithFrame:CGRectMake(-20, -20, 10,10)];

    volumeView.hidden = NO;

 

    [self.view addSubview:volumeView];

这里需要注意三点:

1、需要加入MediaPlayer.framework库,然后导入头文件 #import

2、关于volumeView的hidden设置,当设置为YES是,系统还是会自动调用系统的提示框,因此必须是NO

3、最后就是把提示框的坐标放到屏幕外就可以大功告成了

**************************************************************************************************

接下来要说一下为什么强制打开声音了。

因为MPVolume的这个提示框只对处在声音开启状态时才有效,如果是静音状态下,按音量键,依旧会出提示框,因为静音是对铃声进行操作,MPVolume是对声音进行操作。


补充一个坑爹的地方

当你程序进入后台再回到前台的时候,那个音量图标又出现,fk。解决方法


  

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(enterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(enterForground:) name:UIApplicationDidBecomeActiveNotification object:nil];



//进入后台,释放AudioSession

-(void)enterBackground:(NSNotification *)n{

    AudioSessionSetActive(false);

    self.isIntoBg = YES;

}

//进入前台,激活AudioSession

-(void)enterForground:(NSNotification *)n{

    AudioSessionSetActive(true);

    self.isIntoBg = NO;

}







你可能感兴趣的:(iOS 音量键事件)