2012-02-10 16 views
2

私は、すべてのオーディオボリュームの変更を監視する必要があるandroid.provider.Settings.Systemに登録されたContentObserverを持っています。ハードウェアボリュームボタンをクリックしたときに予期したとおりに通知されますが、AudioManager.setStreamVolumeまたはAudioManager.adjustStreamVolumeを使用してオーディオボリュームを変更すると通知されません。私はthisthatポストとAudioManagerSettings.Systemマニュアルを読み、することはできませんしているアプリで行われた音量変化を観察する

// this.context is the activities context 
this.context.getSystemService(Context.AUDIO_SERVICE).adjustStreamVolume(
    AudioManager.STREAM_RING, AudioManager.ADJUST_LOWER, 
    AudioManager.FLAG_SHOW_UI); 

// this is a Service 
this.getApplicationContext().getContentResolver().registerContentObserver(
    android.provider.Settings.System.CONTENT_URI, 
    true, new ContentObserver(new Handler()) { 
    public void onChange(boolean selfChange) { 
     Log.d("ContentObserver", "got notified"); 
    } 
}); 

そしてここAu​​dioManager.adjustStreamVolumeに私の呼び出し:ここ

は私ContentObserverがどのように見えるかですボリュームボタンで音量を変更するときにオブザーバに通知される理由を見つけますが、AudioManagerで音量を変更するときには表示されません。

ありがとうございました!

答えて

3

AudioManagerは

android.media.VOLUME_CHANGED_ACTION`

意図

を放送しないしかし、これは公式ドキュメントの一部ではありません。これは将来のリリースで変更される可能性があります。しかし、あなたはジンジャーブレッドのデバイスのために少なくともこれを使うことができます。

あなたは* adjustStreamVolumeが呼び出されたときにサービスが通知されない理由を私はまだ本当にわからないが、この答えは、それが*に通知しなければならないというのが私の問題を解決しhere

+0

からの意図にエキストラについての詳細を見つけることができます。私は音量ボタンがset/adjustStreamVolumeを呼び出さないことを知ったが、すべてがSettings.Systemの変更をもたらすべきではないだろうか? –

+0

インテントのエキストラを指すリンクを見ると、このイベントはSCO音量が変化したときにのみブロードキャストされます。 – ekawas

+0

コンテンツオブザーバにはどのようなものをインポートしますか?ありがとう! –

関連する問題