iPhone iOS7 系统声音(铃声和警报)音量控制
Posted
技术标签:
【中文标题】iPhone iOS7 系统声音(铃声和警报)音量控制【英文标题】:iPhone iOS7 system sound (ringer and alert) volume control 【发布时间】:2013-10-13 17:04:39 【问题描述】:这个问题似乎被问了很多次,但没有具体或准确的答案。因此,我将为 ios7 重新构建问题并希望得到一些帮助。
我需要使用 AudioServicesPlaySystemSound 来播放声音,因为时间很关键,这是在可变时间下准确播放同时声音效果的唯一方法(尝试所有其他选项)。
这很好用,但我想调整音量。它似乎能够做到这一点的唯一方法是使用按钮,尽管有人说使用 MPVolumeView(仅适用于音乐),有些人说使用 MPMusicPlayerController(但这也仅适用于音乐,现在已被贬值),而其他人只是这么说无法完成 - 这看起来更有可能。
但是,在 iOS7 中,设置>铃声中有一个滑动控件用于铃声警报音量。有什么方法可以子类化、复制或访问此滑动控件以从应用程序内更改此音量?
【问题讨论】:
我想我在 Waze 应用中看到了这个。我去看看。 看看这个-***.com/questions/10286744/… @Paul Pivec 如果您找到答案,请分享它,因为我也在寻找相同的答案。我不敢相信苹果有这么愚蠢的限制...... 【参考方案1】:Apple 推荐使用MPVolumeView
,所以我想出了这个:
添加volumeSlider
属性:
@property (nonatomic, strong) UISlider *volumeSlider;
初始化MPVolumeView
并在视图中添加某个位置(可以隐藏、没有框架,或者因为showsRouteButton = NO
和showsVolumeSlider = NO
而为空):
MPVolumeView *volumeView = [MPVolumeView new];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];
查找并保存对UISlider
的引用:
__weak __typeof(self)weakSelf = self;
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
if ([obj isKindOfClass:[UISlider class]])
__strong __typeof(weakSelf)strongSelf = weakSelf;
strongSelf.volumeSlider = obj;
*stop = YES;
];
为UIControlEventValueChanged
添加目标操作:
[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];
然后在音量更改时更新您的自定义控件(即通过硬件音量控件):
- (void)handleVolumeChanged:(id)sender
NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value);
self.myCustomVolumeSliderView.value = self.volumeSlider.value;
还有其他方式:
- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender
NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value);
self.volumeSlider.value = self.myCustomVolumeSliderView.value;
注意:确保设置 self.volumeSlider.value
不会循环回到设置 self.myCustomVolumeSliderView.value
。
希望这对某人有所帮助(并且 Apple 不会从 MPVolumeView 中删除 MPVolumeSlider)。
【讨论】:
这似乎改变了系统音量,而不是 OP 要求的铃声/警报音量。【参考方案2】:我想你想通过程序来控制你的音量
- (void)setVolume:(float)Level
OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);
if (errorMsg)
NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
使用此代码设置您想要控制的按钮从您的代码传递的音量级别。
【讨论】:
如果不是通过编程:请参考此链接***.com/questions/10855874/…以上是关于iPhone iOS7 系统声音(铃声和警报)音量控制的主要内容,如果未能解决你的问题,请参考以下文章