2010-03-29 13 views
36

Me gustaría saber cómo controlar el volumen de mi aplicación desde las teclas de volumen (contrariamente a mi creencia, he leído que controlan solo el volumen del timbre). ¿Debo sobrescribir la tecla abajo/arriba?Control de volumen en la aplicación Android

¿O hay otra manera de lograr esto? Pregunto porque si sobrescribo la función mencionada arriba para una actividad, entonces las funciones recibirán el evento solo si una vista asociada con esta actividad tiene el foco, y estoy buscando algo "Globaly" (para trabajar sin importa qué actividad se está ejecutando ahora)

Respuesta

67

Hubo otro question from a long time ago que preguntó lo mismo. Básicamente, la respuesta es: no anule los botones onKeyDown y onKeyUp. Es mucho mejor simplemente usar esta línea setVolumeControlStream(AudioManager.STREAM_MUSIC); en su método onCreate(). Eso le dice al SO que los botones de volumen deberían afectar el volumen de "medios" cuando su aplicación está visible, y ese es el volumen que usa para su aplicación.

En cuanto al control del volumen multimedia sin importar qué aplicación sea visible, no estoy seguro de que se pueda hacer, o si podría, si eso sería algo bueno.

+0

La cosa es que yo' m interesado en funcionar solo cuando se ejecutan actividades de mi aplicación, no tengo ningún deseo de hacerlo funcionar, si una actividad de otra aplicación está en la parte superior de la pila de actividades –

+0

¡Gracias! ¡Creo que podría funcionar para mí! ¿Hay alguna sugerencia en qué actividad debería agregarse esta línea? –

+0

Ponlo en tu método onCreate() de cualquier actividad que vaya a hacer ruido. –

0

Esta es una vieja pregunta, pero hay una excelente biblioteca para manejar el control de volumen en Android (incluso mejor que los botones de volumen, que están limitados a 5 incrementos de nivel de volumen).

http://code.google.com/p/media-volume-control

Tome un vistazo a this package, proporciona el nivel de volumen constante, así como otras características interesantes (como cuando se interrumpe el audio, monitor de volumen a ser notificado si/cuando el nivel de volumen se cambia por cualquier medio --handdy cuando muestra un volumen SeekBar, etc.).

10

En su actividad se puede utilizar uno de los siguientes:

this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
this.setVolumeControlStream(AudioManager.STREAM_RING); 
this.setVolumeControlStream(AudioManager.STREAM_ALARM); 
this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION); 
this.setVolumeControlStream(AudioManager.STREAM_SYSTEM); 
this.setVolumeControlStream(AudioManager.STREAM_VOICECALL); 
1

Esperanza este código androide de trabajo le ayudará a desarrollar su propia aplicación de control de volumen:

public class audioSetting extends Activity { 
     Button b; 
     TextView t; 
     SeekBar s; 
     EditText e; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      b = (Button)findViewById(R.id.button1); 
      s = (SeekBar)findViewById(R.id.seekBar1); 
      e = (EditText)findViewById(R.id.editText1); 

      b.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
        finish(); 
       } 
      }); 
      final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
      int a = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); 
      int c = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
      b.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
        audioManager.setStreamVolume(AudioManager.STREAM_RING, (int)(Integer.parseInt(e.getText().toString().trim())), 0); 
        s.setProgress((int)(Integer.parseInt(e.getText().toString().trim()))); 
       } 
      }); 

      s.setMax(a); 
      s.setProgress(c); 
      e.setText(""+c); 
      s.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
       @Override 
       public void onStopTrackingTouch(SeekBar arg0) { 
       } 

       @Override 
       public void onStartTrackingTouch(SeekBar arg0) { 
       } 

       @Override 
       public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
        audioManager.setStreamVolume(AudioManager.STREAM_RING, arg1, 0); 
        e.setText(""+s.getProgress()); 
       } 
      }); 
     } 
} 
Cuestiones relacionadas