web-dev-qa-db-fra.com

Android: Comment jouer de la musique au volume maximal possible?

Je sais que la question peut être considérée comme "politiquement incorrecte", mais je concevons une application qui "par conception" doit attirer l'attention des personnes dans la plage de distance maximale possible, sinon elle ne sera pas utilisée ... :-)

J'utilise actuellement la classe SoundManager et c'est le code qui joue mon 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); 
}

Le problème est que le volume de son que je reçois le clip joué avec semble être dépendant des paramètres "Paramètres/Audio/Voulme" que l'utilisateur a défini. Au lieu de cela, il semble être indocifendant par les boutons de volume du matériel.

Existe-t-il un moyen pour un Android application pour lire un son au volume physique maximum autorisé par l'appareil?

20
MarcoS

Je suggérerais d'utiliser GetStreammaxvolume et Setstreamvolume pour faire ceci:

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

Ensuite, une fois que vous avez terminé, réglez-le sur le volume d'origine.

Je pense que j'ai été battu au coup de poing, ahh bien :)

Certains cods qui le font réellement, j'utilise le MediaPlayer plutôt que sur le Soundpool car cela vous donne un rappel complet qui ne semble pas être présent sur le point de signalisation:

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);
   }
});

BTW L'AVEC CALL mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); Les valeurs de Streamvolume sont réellement floates 0 -> 1 qui représentent un pourcentage de la valeur maximale afin que vous souhaitiez vraiment y mettre en 1.0f.

42
zeetoobiker

Vous pouvez ajuster les paramètres avant de lire l'audio.

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

Ces deux codes ont fonctionné pour moi mais je préfère celui 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();
});
1
Thilina Anuradh
    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
Pradeep Sodhi