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?
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.
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);
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();
});
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();
}
});