2012-08-28 13 views
5

Ich versuche, die Lautstärke mit AudioManager zu erhöhen.Disable the Volume Toast

Aber es zeigt native Android Volume UI (Volume Seekbar) toast.Ich möchte dies deaktivieren. Ich weiß, dies kann in Aktivität mit Key Event möglich sein, aber ich möchte es durch den Service tun. So deaktivieren Sie den Toast? Hier ist ein Screenshot des Toasts:
enter image description here

+0

Bitte fügen Sie einen Screenshot von diesem "Toast" hinzu. –

+0

Wenn Sie ein Volume erhöhen oder verringern, wird die Lautstärke seekbar nativ.Ich möchte dies deaktivieren. –

Antwort

7

Die AudioManager -Klasse bietet die folgenden Methoden, um das Volumen bestimmter Ströme anzupassen:

Alle diese Methoden nehmen einen flag -Parameter als letztes Argument. Die Flagge, die für Sie interessant ist, ist die FLAG_SHOW_UI welche:

Zeigen Sie einen Toast, der das aktuelle Volumen enthält.

Also, der Toast, um loszuwerden, tun nicht Versorgung dieses Flag (oder den int-Wert 1), aber alle anderen Flaggen liefern (falls erforderlich) oder einfach nur 0:

AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); 
manager.adjustVolume(AudioManager.ADJUST_RAISE, 0); 

Das obige Code-Snippet funktioniert für mich auf Android 4.0.4 (Motorola Xoom) und Android 2.3.5 (HTC Desire HD).

+0

Es funktioniert nicht. –

+0

@SatheeshKumar Ich habe es auf meinen Geräten getestet und ein Code-Snippet hinzugefügt, das für mich funktioniert hat. Siehe meine aktualisierte Antwort. –

+0

@Lukas Knuth Ihr Code-Snippet ist für mich zumindest unvollständig. Wo fügst du diesen Code hinzu? Im OnKeyDown Listener? – Radu

3

Ich weiß, es ist ein wenig spät, aber ich glaube, ich habe es geschafft, das Volumen Toast mit diesem verstecken:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    switch(keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      //volumeDown(); 
      return true; 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      //volumeUp(); 
      return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 


@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch(keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      volumeDown(); 
      return true; 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      volumeUp(); 
      return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

private void volumeUp(){ 
    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, SOME_RANDOM_VALUE, AudioManager.FLAG_VIBRATE); 
} 

Ovveriding nur eine Methode von onKeyUp und onKeyDown nicht verhindern, dass der Toast Anzeige (auch bei Verwendung von Flags).

Es ist ein bisschen seltsam - wie Android versucht, den Toast zweimal anzuzeigen.