如何在iOS上更改设备音量 – 而不是音乐音量

我想更改iOS(iPhone)上的设备音量。

我知道我可以用下面这行代码来改变音乐库的音量:

//implement at first MediaPlayer framework MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; musicPlayer.volume = 1; 

但那不是我的目标。
我想改变设备音量或让我说铃声的音量。

我怎样才能做到这一点? 只需更改DEVICE音量?

回答brush51的问题:

我怎样才能做到这一点? 只需更改DEVICE音量?

由于0x7fffffffbuild议:

您不能以编程方式更改设备音量,但是MPVolumeView(音量滑块)可以更改设备音量,但只能通过用户交互。

所以,苹果build议使用MPVolumeView ,所以我想出了这个:

添加volumeSlider属性:

 @property (nonatomic, strong) UISlider *volumeSlider; 

初始化MPVolumeView并添加到您的视图的某个地方(可以隐藏,没有框架或空的,因为showsRouteButton = NOshowsVolumeSlider = 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.volumeSlider.value = < some value between 0.0f and 1.0f >; 

希望这有助于(并且苹果不会从MPVolumeView中删除MPVolumeSlider)。

以下是我所做的:

 func setSystemVolume(volume: Float) { let volumeView = MPVolumeView() for view in volumeView.subviews { if (NSStringFromClass(view.classForCoder) == "MPVolumeSlider") { let slider = view as! UISlider slider.setValue(volume, animated: false) } } } 

由于MPMusicPlayerController中的属性volume在iOS 7中MPMusicPlayerController被废弃。这只是您可以做到的方法。

您必须使用applicationMusicPlayer而不是iPodMusicPlayer来设置系统音量:

 #import <MediaPlayer/MediaPlayer.h> musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; musicPlayer.volume = 1; // max volume musicPlayer.volume = 0; // min volume (mute) musicPlayer.volume = 0.0625; // 1 bar on the overlay volume display 

这个(Swift)解决scheme对我来说很好用: http : //weimenglee.blogspot.com/2015/07/ios-tip-programmatically-adjust-device.html

 import MediaPlayer let volumeView = MPVolumeView() if let view = volumeView.subviews.first as? UISlider{ view.value = 0.1 //---0 t0 1.0--- } 

这是一个小包装类,可以设置系统音量,并通知您任何更改(将您自己的更改响应者传递给setTarget:action :)。

编辑 :如果您隐藏MPVolumeView控件或不添加它作为子视图,则系统将显示屏幕中间的默认音量平方,每当您以编程方式更改音量。 如果你不喜欢系统的function,解决方法是在屏幕外面设置视图坐标。 我编辑了一下我的代码来反映这一点。

 @import MediaPlayer; @interface SysVolumeControl : MPVolumeView @property (nonatomic) float value; // from 0 to 1.0 - (void)setTarget:(id)target action:(SEL)action; @end @implementation SysVolumeControl { UISlider* _slider; } - (id)init { if (self = [super initWithFrame:CGRectMake(-300, 0, 200, 50)]) { for (UIView* view in self.subviews) { if ([view isKindOfClass:UISlider.class]) { _slider = (UISlider*)view; break; } } } return self; } - (float)value { return _slider.value; } - (void)setValue:(float)value { _slider.value = value; } - (void)setTarget:(id)target action:(SEL)action { [_slider addTarget:target action:action forControlEvents:UIControlEventValueChanged]; } @end 

然后创build一个实例并使用它:

 SysVolumeControl* sysVolumeControl = [SysVolumeControl new]; [myView addSubview:sysVolumeControl]; sysVolumeControl.value = 1.0; [sysVolumeControl setTarget:self action:@selector(mySysVolumeResponder:)]; 

Swift 3 – 我使用这个:

 func setVolumeTo(volume: Float) { (MPVolumeView().subviews.filter{NSStringFromClass($0.classForCoder) == "MPVolumeSlider"}.first as? UISlider)?.setValue(volume, animated: false) }