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 № 1Ecco 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();