您的位置:首页 > 其它

自定义实现MPVolumeView音量控件

2012-09-13 20:11 323 查看


在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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: