4

音量変化の検出を実装しようとしたときに問題が発生しました。変更の検出はサービスを介してバックグラウンドで検出する必要があるため、ボリューム キーの押下を傍受できません。

ContentObserver で音量設定の変更をリッスンしようとしましたが、うまくいきませんでした。しかし、もう少し掘り下げたところ、次のように登録すると、ContentObserver が音量の変化を検出することがわかりました。

this.getApplicationContext().getContentResolver().registerContentObserver( 
    android.provider.Settings.System.CONTENT_URI, true, 
    mSettingsContentObserver );

私が正しく理解していれば、最初のパラメーター - リッスンする設定の URI を変更しようとしました。しかし、私は何も達成しませんでした。では、どうすればこれを行うことができますか?設定が変更されるたびにUIを更新したくありません(シークバーを特定の位置に設定しています)。

では、コンテンツ オブザーバーを登録してメディア ボリュームの変化をリッスンするにはどうすればよいでしょうか。

ContentObserver のコードは次のとおりです。

public class SettingsContentObserver extends ContentObserver {

 public SettingsContentObserver(Handler handler) {
     super(handler);
 } 

 @Override
 public boolean deliverSelfNotifications() {
      return super.deliverSelfNotifications(); 
 }

 @Override
 public void onChange(boolean selfChange) {
     super.onChange(selfChange);
     myMethod();
 }
}
4

3 に答える 3

3

onChange メソッドを次のように変更します

@Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);

    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);

    int delta=previousVolume-currentVolume;

    if(delta>0)
    {
        Logger.d("Decreased");
        previousVolume=currentVolume;
    }
    else if(delta<0)
    {
        Logger.d("Increased");
        previousVolume=currentVolume;
    }
}
于 2013-07-01T06:35:40.827 に答える