ios监听静音键和音量键事件

判断是否静音:

  1. (BOOL)isMuted  
  2.  
  3.     CFStringRef route;  
  4.     UInt32 routeSize sizeof(CFStringRef);  
  5.   
  6.     OSStatus status AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route);  
  7.     if (status == kAudioSessionNoError)  
  8.      
  9.         if (route == NULL || !CFStringGetLength(route))  
  10.             return TRUE;  
  11.      
  12.   
  13.     return FALSE;  
  14.  

监听静音键:

  1. (BOOL)addMutedListener  
  2.  
  3.     OSStatus AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,  
  4.                                                  audioRouteChangeListenerCallback,  
  5.                                                  self);  
  6.     return == kAudioSessionNoError;  
  7.  

回调函数:

  1. void audioRouteChangeListenerCallback (void *inUserData,  
  2.                                        AudioSessionPropertyID inPropertyID,  
  3.                                        UInt32 inPropertyValueSize,  
  4.                                        const void *inPropertyValue  
  5.                                         
  6.  
  7.     if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return 
  8.     BOOL muted [mediaVolume isMuted];  
  9.     // add code here  
  10.  

设置和获取音量:

  1. (float)volume  
  2.  
  3.     return [[MPMusicPlayerController applicationMusicPlayer] volume];  
  4.  
  5.   
  6. (void)setVolume:(float)newVolume  
  7.  
  8.     [[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];  
  9.  

监听音量键:

  1. (BOOL)addHardKeyVolumeListener  
  2.  
  3.     OSStatus AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume,  
  4.                                                  audioVolumeChangeListenerCallback,  
  5.                                                  self);  
  6.     return == kAudioSessionNoError;  
  7.  

音量键回调函数:

  1. void audioVolumeChangeListenerCallback (void *inUserData,  
  2.                                         AudioSessionPropertyID inPropertyID,  
  3.                                         UInt32 inPropertyValueSize,  
  4.                                         const void *inPropertyValue)  
  5.  
  6.     if (inPropertyID != kAudioSessionProperty_CurrentHardwareOutputVolume) return 
  7.     Float32 value *(Float32 *)inPropertyValue;  
  8.     MediaVolume *mediaVolume (MediaVolume *)inUserData;  
  9.     // add code here  
  10.  


方法1:
    在applicationDidFinishLaunching函数里添加
     [[NSNotificationCenter defaultCenter]addObserver:self
                                            selector:@selector(volumeChanged:)
                                            name:@"AVSystemController_SystemVolumeDidChangeNotification"
                                            object:nil];

  - (void)volumeChanged:(NSNotification*)notification
{
    float volume=
   [[[notification userInfo]
     objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
    floatValue];
    
   DDLogVerbose(@"current volume = %f",volume);   
}

  弊端:当app进入后天后,依然会监听到volume的变化

2. 对 AudioSession 添加volume变化的 listener,可以放在startAudioSession函数里
    //add alistener for Outputvolume
   AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume,
                                   volumeListenerCallback,
                                   self
                                   );


void volumeListenerCallback (
                            void                     *inClientData,
                            AudioSessionPropertyID   inID,
                            UInt32                   inDataSize,
                            constvoid               *inData
                            ){
    const float*volumePointer = inData;
    float volume= *volumePointer;
   NSLog(@"volumeListenerCallback %f", volume);
}

3. 获取当前的volume
    float volume = 0.0;
    UInt32dataSize = sizeof(float);
    OSStatusstatus = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputVolume,
                            &dataSize,
                            &volume);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值