2012-03-07 7 views
19

Sé que la pregunta puede considerarse "políticamente incorrecta", pero estoy diseñando una aplicación que "por diseño" debe llamar la atención de las personas dentro del rango de distancia máximo posible; de ​​lo contrario, no se utilizará ...: -)Android: cómo reproducir música al máximo volumen posible?

Actualmente estoy usando la clase SoundManager, y este es el código que juega mi clip OGG:

public void playSound(int index) { 
    int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
    mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); 
} 

el problema es que el volumen del sonido consigo el clip jugado con parece ser dependiente de Configuraciones "Configuraciones/Audio/Voulme" que el usuario ha configurado. En cambio, parece ser independiente de la configuración de botones de volumen de hardware.

¿Hay alguna manera para que una aplicación de Android reproduzca un sonido con el volumen físico máximo permitido por el dispositivo?

Respuesta

38

me gustaría sugerir el uso de getStreamMaxVolume y setStreamVolume para hacer esto:

int origionalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 

Luego, una vez que haya terminado acaba de establecer de nuevo al volumen original.

creo que he sido golpeado por la mano, ah bien :)

Algunos código que realmente hace esto, estoy usando el MediaPlayer en lugar de la soundpool ya que esto le da una devolución de llamada completo juego que no lo hace parecen estar presentes en la soundpool:

final AudioManager mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
final int originalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 
MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mp.setDataSource("content://media/internal/audio/media/97"); 
mp.prepare(); 
mp.start(); 
mp.setOnCompletionListener(new OnCompletionListener() 
{ 
    @Override 
    public void onCompletion(MediaPlayer mp) 
    { 
     mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0); 
    } 
}); 

por cierto la llamada mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); con los valores streamVolume son en realidad flota 0 -> 1 que representan un porcentaje del valor máximo así que es realmente sólo quiere poner en 1.0f ahí.

+0

Sí, lo estabas ... ;-) Pero me gusta la idea de restaurar el volumen original, por lo que cuando la aplicación se cierra (o muere) el usuario ha vuelto a configurar su volumen ... – MarcoS

+0

Solo lo he editado, no No creo que necesite cambiar el volumen, solo necesita usar el volumen máximo en lugar del volumen reducido cuando lo reproduce. – zeetoobiker

+0

Sí, es aún mejor ... Gracias ... – MarcoS

4

Puede ajustar la configuración antes de reproducir el audio.

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.getStreamMaxVolume(), 0); 
+0

Es AudioManager.getStreamMaxVolume() indipendent de configuración de cualquier usuario? ¿Es el volumen físico máximo del dispositivo? – MarcoS

+0

En realidad, cambia la configuración del usuario, por lo que sí. – josephus

1
float count=100*.01f; 

MediaPlayer mp=new MediaPlayer(); 

mp.setLooping(false);  
      mp = MediaPlayer.create(ActivityName.this, myUri); 

      mp.setVolume(count,count); 
      mp.start(); 
mp.setOnCompletionListener(new OnCompletionListener() { 

      public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
           mp.release(); 
       mp.stop(); 
      } 
     }); 
+1

que se detiene después del lanzamiento? –

-1

Ese es el código equivocado.

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
          audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 
+1

Tu código debe estar en los comentarios. –

1

Ambos de estos códigos trabajaron para mí, pero yo prefiero el de MediaPlayer

AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND); 

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
MediaPlayer mp=new MediaPlayer(); 
mp.setLooping(false); 
mp = MediaPlayer.create(HomeActivity.this, notification); 
mp.setVolume(count,count); 
mp.start(); 
}); 
Cuestiones relacionadas