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