私は、すべてのオーディオボリュームの変更を監視する必要があるandroid.provider.Settings.Systemに登録されたContentObserverを持っています。ハードウェアボリュームボタンをクリックしたときに予期したとおりに通知されますが、AudioManager.setStreamVolumeまたはAudioManager.adjustStreamVolumeを使用してオーディオボリュームを変更すると通知されません。私はthisとthatポストとAudioManagerとSettings.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");
}
});
そしてここAudioManager.adjustStreamVolumeに私の呼び出し:ここ
は私ContentObserverがどのように見えるかですボリュームボタンで音量を変更するときにオブザーバに通知される理由を見つけますが、AudioManagerで音量を変更するときには表示されません。
ありがとうございました!
からの意図にエキストラについての詳細を見つけることができます。私は音量ボタンがset/adjustStreamVolumeを呼び出さないことを知ったが、すべてがSettings.Systemの変更をもたらすべきではないだろうか? –
インテントのエキストラを指すリンクを見ると、このイベントはSCO音量が変化したときにのみブロードキャストされます。 – ekawas
コンテンツオブザーバにはどのようなものをインポートしますか?ありがとう! –