本文共 1742 字,大约阅读时间需要 5 分钟。
在ios中可以使用MPVolumeView来调节音量,缺点是UI是固定的,而且静音的时候会显示“No Volume Available”。自定义的volume view能避免这些问题。
自定义的volume view的UI部分比较好实现,在这里主要谈下静音键和音量键事件的处理。
注:使用前需要添加头文件 #import <MediaPlayer/MediaPlayer.h>
判断是否静音:(该方法在ios5中被取消了)
- (BOOL)isMuted{ CFStringRef route;UInt32 routeSize = sizeof(CFStringRef); OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route);if (status == kAudioSessionNoError){ if (route == NULL || !CFStringGetLength(route))return TRUE;} return FALSE;} 监听静音键: - (BOOL)addMutedListener{ OSStatus s = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback,self);return s == kAudioSessionNoError;}回调函数: void audioRouteChangeListenerCallback (void *inUserData,AudioSessionPropertyID inPropertyID,UInt32 inPropertyValueSize,const void *inPropertyValue){ if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return;BOOL muted = [self isMuted];// add code here} 设置和获取音量: - (float)volume{ return [[MPMusicPlayerController applicationMusicPlayer] volume];} - (void)setVolume:(float)newVolume{ [[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];} 监听音量键: - (BOOL)addHardKeyVolumeListener{ OSStatus s = AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume,audioVolumeChangeListenerCallback,self);return s == kAudioSessionNoError;} 音量键回调函数: void audioVolumeChangeListenerCallback (void *inUserData,AudioSessionPropertyID inPropertyID,UInt32 inPropertyValueSize,const void *inPropertyValue){ if (inPropertyID != kAudioSessionProperty_CurrentHardwareOutputVolume) return;Float32 value = *(Float32 *)inPropertyValue;MediaVolume *mediaVolume = (MediaVolume *)inUserData;// add code here}
转载地址:http://iiosi.baihongyu.com/