/ / Le volume d'Android MediaPlayer est très faible (volume déjà ajusté)

Le volume d'Android MediaPlayer est très faible (volume déjà ajusté) - java, android, lecteur multimédia

J'utilise le MediaPlayer pour jouer l'un dessonnerie d'alarme interne. J'utilise setVolume (1.0f, 1.0f) pour optimiser le volume lors de la lecture de la sonnerie. mais la sonnerie ne joue pas à plein volume (quand je la compare à jouer la sonnerie séparément ou par le biais de l’alarme Android construite)

voici mon code

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

J'ai ajouté la permission suivante android.permission.MODIFY_AUDIO_SETTINGS (pas sûr si c'est nécessaire)

Toute idée pourquoi le mediaPlayer ne pourra toujours pas "jouer le son au maximum?"

Réponses:

12 pour la réponse № 1

Voici la solution que j'ai trouvée.

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 pour la réponse № 2

J'ai rencontré le même problème, et puis remarqué cela dans le Documentation MediaPlayer:

Lorsque vous vous trouvez dans l'état Préparé, vous pouvez régler des propriétés telles que le volume audio / son, screenOnWhilePlaying et la mise en boucle en appelant les méthodes de définition correspondantes.

Appel setVolume après appel prepare corrige cela, de sorte que l'audio est joué au volume maximum. En fait, selon les docs que je viens de citer, vous devriez appeler setLooping après prepare ainsi que:

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