1

我的 iPhone 应用程序出现声音问题。我有一个 UISlider 对象,用于调整音量。

当它出现时,我使用基于以下行的代码来设置滑块的初始值:

AudioSessionGetProperty ('chov',&dataSize,&volume);

这很好用。然后,当我激活设备的硬件音量按钮时,我希望滑块相应地移动。但是这部分基于这种代码:

AudioSessionPropertyID volumeChangeID=kAudioSessionProperty_CurrentHardwareOutputVolume;
AudioSessionAddPropertyListener(volumeChangeID,handleSoundVolume,self);

效果不太好。我可以看到回调函数:handleSoundVolume 仅在播放某些声音时才被调用,否则不会被调用。另一方面,AudioSessionGetProperty 提供的值始终是正确的,与是否播放声音无关。这是为什么?

我认为 AudioSessionGetProperty 和 AudioSessionAddPropertyListener 正在“一起”工作,但似乎并非如此。

看看 iPod touch 上默认的 Music 应用,似乎我想做的事情是很有可能的。

感谢您提供任何信息。

4

1 回答 1

1

我看到了同样的问题,回调对我来说根本不起作用。

最好的解决方案是为属性 AVSystemController_SystemVolumeDidChangeNotification 添加一个观察者到 NSNotificationCenter。

NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(volumeChanged:)
               name:@"AVSystemController_SystemVolumeDidChangeNotification"
             object:nil];

你有方法

- (void)volumeChanged:(NSNotification*)notification
{
     float volume = [[[notification userInfo]
                        objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
                      floatValue];
}

顺便说一句,我建议您不要使用“chov”,而是应该使用常量

kAudioSessionProperty_CurrentHardwareOutputVolume
于 2012-07-16T23:47:15.590 回答