/ / Il volume di Android MediaPlayer è molto basso (volume già regolato) - java, android, media-player

Il volume di Android MediaPlayer è molto basso (volume già regolato) - java, android, media-player

Sto usando MediaPlayer per riprodurre uno deisuoneria allarme interno. sto usando setVolume (1.0f, 1.0f) per massimizzare il volume quando viene suonata la suoneria. ma la suoneria non suona a tutto volume (quando la paragono a suonare la suoneria separatamente o tramite l'allarme Android integrato)

ecco il mio codice

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

Ho aggiunto la seguente autorizzazione android.permission.MODIFY_AUDIO_SETTINGS (non sono sicuro se è necessario)

Qualche idea per cui il mediaPlayer continua a non riprodurre il suono al massimo?

risposte:

12 per risposta № 1

Ecco la soluzione che ho trovato.

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 per risposta № 2

Ho riscontrato lo stesso problema, quindi ho notato questo nel file Documentazione MediaPlayer:

Mentre ci si trova nello stato Preparato, proprietà come volume audio / suono, screenOnWhilePlaying, loop possono essere regolate richiamando i metodi impostati corrispondenti.

chiamata setVolume dopo chiamata prepare corregge questo, in modo che l'audio venga riprodotto al massimo volume. In realtà, secondo i documenti che ho appena citato, dovresti chiamare setLooping dopo prepare anche:

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