в моем приложении у меня есть VerticalSeekBar
(некоторая пользовательская реализация SeekBar
), чей прогресс должен измениться, когда пользователь изменяет громкость мультимедиа с помощью аппаратных кнопок. Ниже приведено полурабочее решение с использованием ContentObserver
:
public class SettingsContentObserver extends ContentObserver {
private VerticalSeekBar sb;
private AudioManager am;
public SettingsContentObserver(Handler handler, VerticalSeekBar sb, AudioManager am) {
super(handler);
this.sb = sb;
this.am = am;
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
sb.setProgress(am.getStreamVolume(AudioManager.STREAM_MUSIC));
}
}
Мероприятия:
@Override
protected void onResume() {
super.onResume();
mSettingsContentObserver = new SettingsContentObserver( new Handler(), vBar, audioMan );
this.getApplicationContext().getContentResolver().registerContentObserver(
android.provider.Settings.System.CONTENT_URI, true,
mSettingsContentObserver );
}
Проблема: изменения громкости обнаруживаются, НО есть задержка в несколько секунд, прежде чем они будут обнаружены, и прогресс SeekBar
изменится.
Вопрос: есть ли более надежный способ прослушивания изменений громкости в конкретном потоке громкости? Пожалуйста, поделитесь своим решением, если у вас есть