2012-07-10 86 views
1

我有我的声音的iPhone应用程序的问题。 我有一个UISlider对象,我用它来调整音量。UISlider下列音量,不工作

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

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

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

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

不工作这么好。 我能看到的是回调函数:handleSoundVolume只在某些声音播放时调用,否则不会。 另一方面,AudioSessionGetProperty提供的值始终是正确的,与声音播放或不播放无关。 这是为什么?

我想AudioSessionGetProperty和AudioSessionAddPropertyListener正在努力“在一起”,但似乎并非如此。

看着iPod touch上默认的音乐应用程序,似乎有什么我想要做的是完全可能的。

感谢您的任何一条信息。

回答

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