2011-11-26 23 views
5

Estoy usando el MediaPlayer para reproducir uno de los tonos de llamada de alarma internos. estoy usando setVolume (1.0f, 1.0f) para maximizar el volumen cuando se reproduce el tono de llamada. pero el tono no juega a todo volumen (cuando lo comparo con la reproducción del tono de llamada por separado o a través de la que la alarma androide construido)El volumen de Android MediaPlayer es muy bajo (volumen ajustado)

aquí es mi código

mediaPlayer.setDataSource(context, ringtoneUri); 
mediaPlayer.setLooping(looping); 
mediaPlayer.setVolume(1.0f, 1.0f); 
mediaPlayer.prepare(); 
mediaPlayer.start(); 

añadí la siguiente android.permission permiso .MODIFY_AUDIO_SETTINGS (no estoy seguro si esto es necesario)

¿Alguna idea de por qué el mediaPlayer todavía no reproduce el sonido al máximo?

Respuesta

11

Aquí está la solución que encontré.

AudioManager amanager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
int maxVolume = amanager.getStreamMaxVolume(AudioManager.STREAM_ALARM); 
amanager.setStreamVolume(AudioManager.STREAM_ALARM, maxVolume, 0); 

MediaPlayer mediaPlayer= new MediaPlayer(); 

mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); // this is important. 

mediaPlayer.setDataSource(context, ringtoneUri); 
mediaPlayer.setLooping(looping); 
mediaPlayer.prepare(); 
mediaPlayer.start(); 
9

me encontré con el mismo problema, y ​​luego dimos cuenta que este esta en el MediaPlayer documentation:

Mientras que en el estado preparado, propiedades tales como audio/volumen del sonido, screenOnWhilePlaying, de enlace se pueden ajustar mediante la invocación los métodos de conjunto correspondientes.

Calling setVolume después de llamar prepare reparar este problema, de modo que el audio se reproduce a un volumen máximo. De hecho, de acuerdo con los documentos que acabo de citar, debe llamar al setLooping después de prepare también:

mediaPlayer.setDataSource(context, ringtoneUri); 
mediaPlayer.prepare(); 
mediaPlayer.setLooping(looping); 
mediaPlayer.setVolume(1.0f, 1.0f); 
mediaPlayer.start(); 
Cuestiones relacionadas