iOS 7:不推荐使用MPMusicPlayerController卷.如何更改设备音量?

Max*_*kin 41 volume mpmusicplayercontroller ios ios7

自iOS 7以来,不推荐使用 MPMusicPlayerController setVolume

有没有其他方法可以改变系统音乐音量?最好没有用户交互.其重要特性:自动增加AppStore的任何闹钟音量.

amb*_*ght 51

准确地回答你的问题:是的,还有其他方法可以在没有用户交互的情况下更改系统卷.

直到最近,我曾经认为只能使用私有API以编程方式使用MPVolumeView更改卷.但我刚刚验证过,更改volumeSlider和faking滑块的touchUP事件的值有效:

MPVolumeView* volumeView = [[MPVolumeView alloc] init];

//find the volumeSlider
UISlider* volumeViewSlider = nil;
for (UIView *view in [volumeView subviews]){
    if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
        volumeViewSlider = (UISlider*)view;
        break;
    }
}

[volumeViewSlider setValue:1.0f animated:YES];
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

(当滑块接收到touchUP事件时,它将调用_commitVolumeChange自身的方法,这将改变系统音量)

  • @ambientlight我知道它并不直接使用私有API,但是伪造用户交互作为触发私有API`_commitVolumeChange`的一种解决方法对我来说有点冒险。还是)感谢你的建议!:) (2认同)

ame*_*gin 13

在Apple认为适合取消此决定之前,我发现了两种补救措施:

  • 继续使用volume属性,它仍然可以在iOS 7.0.2下运行
  • 使用AVAudioSession.outputVolume在应用程序唤醒时读取卷,如果卷低于(或高于)用户指定的值,则弹出包含MPVolumeView的警报.至少你的用户知道他们的闹钟(或其他)会安静地播放,并有机会调整音量.或者,您可以非常清楚地显示音量级别,这样他们就不会感到意外.


Jon*_*gel 9

这样做:

let masterVolumeSlider: MPVolumeView = MPVolumeView()

if let view = masterVolumeSlider.subviews.first as? UISlider{

    view.value = 1.0

}
Run Code Online (Sandbox Code Playgroud)