dans mon application J'ai un VerticalSeekBar
(une mise en œuvre personnalisée de SeekBar
) dont la progression devrait changer lorsque l'utilisateur change le volume de médias en utilisant les boutons matériels. Voici une solution demi-travail en utilisant un ContentObserver
:Android - détecter le changement de volume de flux
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));
}
}
Activité:
@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);
}
La question: les changements de volume sont détectés mais il y a un délai de quelques secondes jusqu'à ce qu'ils soient détectés et les changements de progrès de SeekBar
.
La question: existe-t-il un moyen plus fiable d'écouter les changements de volume sur un flux de volume particulier? S'il vous plaît partager votre solution au cas où vous en avez