自定义实现MPVolumeView音量控件 修改系统音量(SystemVolume)的方法
http://blog.****.net/theonezh/article/details/8158420
http://www.cnblogs.com/cate/ios/
http://www.cnblogs.com/pinping/archive/2012/10/12.html
http://www.cnblogs.com/entlibforum/archive/2012/10/16/2725411.html
http://www.cocoachina.com/applenews/devnews/2012/1114/5085.html
在ios中可以使用MPVolumeView来调节音量,缺点是UI是固定的,而且静音的时候会显示“No Volume Available”。自定义的volume view能避免这些问题。
自定义的volume view的UI部分比较好实现,在这里主要谈下静音键和音量键事件的处理。
判断是否静音:
- (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 = [mediaVolume 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 }
大家试试看,看看行不行~