自定义实现MPVolumeView音量控件
来源:互联网 发布:校园网用户mac地址错误 编辑:程序博客网 时间:2024/06/08 15:41
http://blog.csdn.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
http://mobilesolutions.blog.163.com/blog/static/189224176201111725559550/
在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
}
修改系统音量(SystemVolume)的方法
看到很多朋友在问能不能修改系统的音量,所以我也去找了一下。
发现,SDK中确实有设置system volume的方法,是一个private class,官方不允许使用,所以就算你用了,苹果的审核也不会通过,因为标明了,那个是私有的类!
还有人提到MPVolumeView,这个可以,但是这个的实现,是在屏幕中创建一个音量条,来取代原来按侧边键出来的大喇叭。
是可以达到同步设置的。但是音量只能由用户手动拖动音量条控制。
附上简单的使用代码,因为我是在cocos2d里面试的,所以就加到window里面了。
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:window.bounds] autorelease];
[window addSubview:volumeView];
[volumeView sizeToFit];
我找了一下,发现一个类,就是MPMusicPlayerController。我们用来播放音乐的。MPVolumeView应该算是其中的一个组件吧。
这个类有一个值,volume~可以直接设置,而且,最总要的是,他可以同步系统音量,且不会显示出来。
用法很简单。
MPMusicPlayerController *mpc = [MPMusicPlayerController applicationMusicPlayer];
mpc.volume = 0; //0.0~1.0
用这个方法可以绕过那些麻烦的底层控制,用官方写好的东西,达到我们要的效果。
大家试试看,看看行不行~
- 自定义实现MPVolumeView音量控件
- 自定义实现MPVolumeView音量控件
- 自定义实现MPVolumeView音量控件
- 自定义实现MPVolumeView音量控件
- 控制系统音量,自定义MPVolumeView
- 自定义MPVolumeView控件
- 自定义音量调节控件的实现
- Android 自定义音量控件
- 自定义 MPVolumeView 外观
- 【Android界面实现】自定义音量调节控件的实现
- iOS --- 音量调节视图MPVolumeView的使用
- iOS_隐藏系统音量(MPVolumeView初探)
- iOS系统音量控制——MPVolumeView
- 实现自定义音量盘
- Android 自定义音量调节控件
- Android自定义音量条控件
- 自定义控件实战<四> 音量增减控件
- Android自定义控件——音量控制器
- Android_Back键再按一次退出程序
- 记录一下mysql的递归。。
- Java8函数式编程实现一个工厂
- activity和service之间的相互通信方法
- Android事件分发机制,事件拦截和事件响应
- 自定义实现MPVolumeView音量控件
- [JS教程] input checkbox 用js实现全选/不选
- Android 常见面试题
- Swift Modules for React Native
- 可变参数的宏定义
- 关于Android蓝牙设备的连接使用
- 淘气堡设备如何选择
- redis配置文件redis.conf中文版(基于2.4)
- Spark资源调度中的通信流程