自定义实现MPVolumeView音量控件

 

在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 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值