我的iPhone应用程序中有声音问题。 我有一个UISlider对象,用于调整音量。
当我看到我使用基于以下行的代码时,设置滑块的初始值:
AudioSessionGetProperty ('chov',&dataSize,&volume);
并且工作正常。然后,当我激活设备的硬件音量按钮时,我希望滑块相应移动。 但这部分基于这种代码:
AudioSessionPropertyID volumeChangeID=kAudioSessionProperty_CurrentHardwareOutputVolume;
AudioSessionAddPropertyListener(volumeChangeID,handleSoundVolume,self);
效果不好。 我能看到的是回调函数:handleSoundVolume仅在播放某些声音时调用,否则仅调用。 另一方面,AudioSessionGetProperty提供的值总是正确的,与声音播放无关。 那是为什么?
我认为AudioSessionGetProperty和AudioSessionAddPropertyListener正在“合作”,但似乎并非如此。
查看iPod touch上的默认音乐应用程序,似乎我想做的事情很有可能。
感谢您提供任何信息。
答案 0 :(得分:1)
我看到同样的问题,回调对我来说根本不起作用。
最佳解决方案是向NSNotificationCenter添加一个观察者,用于属性AVSystemController_SystemVolumeDidChangeNotification。
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