程序访问iPhone音量按钮

COT*_*OHA 23 iphone objective-c

有没有办法订阅音量按钮按事件?

los*_*sit 22

最近被Apple拒绝之后

不要使用它.Apple现在使用一些补丁,如果它使用任何私有API,它会立即拒绝你的应用程序 - 虽然应该注意到App Store上的一些应用程序已经使用它并且仍然存在!

现在唯一的方法是让AVAudioPlayer准备播放但不播放([player prepareToPlay]).这似乎是根据摇杆按钮调整应用程序的音量.

目前还没有其他公布的方式可以解决这个问题.

请阅读上面的说明

是的,使用MPVolumeView

MPVolumeView *volume = [[[MPVolumeView alloc] initWithFrame:CGRectMake(18.0, 340.0, 284.0, 23.0)] autorelease];
  [[self view] addSubview:volume];

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) 
                                        name:@"AVSystemController_SystemVolumeDidChangeNotification" 
                                        object:nil];    
  for (UIView *view in [volume subviews]){
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) {
      volumeViewSlider = view;  //volumeViewSlider is a UIView * object
    }
  }
  [volumeViewSlider _updateVolumeFromAVSystemController];

-(IBAction)volumeChanged:(id)sender{
  [volumeViewSlider _updateVolumeFromAVSystemController];
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个滑块(与ipod中使用的滑块相同),其值将根据手机的音量进行更改

您将收到编译时警告,视图可能无法响应_updateVolumeFromAVSystemControl,但只是忽略它.

  • 你可以使用MPMusicPlayerController*musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; musicPlayer.volume = newVolume; 这不是私密的,会改变音量值. (5认同)
  • 您无法使用此代码发布应用,它使用私有API.这就是编译时警告的内容,下划线前缀也是赠品. (2认同)

Wil*_*iss 17

如果您只是想收到通知,我认为它是这样的:

如果我错了,请纠正我,但我不相信这会使用任何内部API.

[[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(volumeChanged:) 
        name:@"AVSystemController_SystemVolumeDidChangeNotification" 
        object:nil];
Run Code Online (Sandbox Code Playgroud)

此活动的详细信息如下:http://www.cocoadev.com/index.pl?AVSystemController

这里的其他回复似乎是基于这个黑客:http://blog.stormyprods.com/2008/09/proper-usage-of-mpvolumeview-class.html这是一个现在修复的bug的解决方法.

但我很确定如果你想做的只是获取通知,而不是设置系统音量,你可以像任何其他事件一样使用通知中心!

请注意:由于Apple在相机中添加了音量增大操作,因此当a 可见时,不会发布此通知UIImagePickerController.

  • 如果我还添加了一个不可见的MPVolume视图,这对我有用.也就是说,只需添加到您的代码:`#import <MediaPlayer/MediaPlayer.h>`和`MPVolumeView*slide = [MPVolumeView new];` (4认同)
  • 请注意,当`UIImagePickerController`(例如相机)可见时,此通知不会被发送. (2认同)