1

iPhone アプリのサウンドに問題があります。音量を調整するために使用する UISlider オブジェクトがあります。

表示されたら、次の行に基づくコードを使用して、スライダーの初期値を設定します。

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

そしてそれはうまくいきます。次に、デバイスのハードウェアの音量ボタンを有効にしたときに、それに応じてスライダーを動かしたいと思います。しかし、この部分はこの種のコードに基づいています:

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

うまくいきません。私が見ることができるのは、コールバック関数:handleSoundVolume は、サウンドが再生されているときにのみ呼び出され、それ以外の場合には呼び出されないことです。一方、AudioSessionGetProperty によって提供される値は、サウンドが再生されているかどうかに関係なく、常に正しい値です。何故ですか?

AudioSessionGetProperty と AudioSessionAddPropertyListener は「一緒に」動作していると思っていましたが、そうではないようです。

iPod touch のデフォルトの音楽アプリを見ると、やりたいことはかなり可能のようです。

情報をありがとう。

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 に答える