2012-03-07 12 views
19

So che la domanda può essere considerata "politicamente scorretta", ma sto progettando un'applicazione che "design" deve attirare l'attenzione delle persone nella massima distanza possibile, altrimenti non sarà usata ...: -)Android: come riprodurre la musica al massimo volume possibile?

attualmente sto usando classe SoundManager, e questo è il codice che svolge la mia 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); 
} 

il problema è che il volume del suono ottengo la clip giocato con sembra dipendere da Impostazioni "Impostazioni/Audio/Voulme" che l'utente ha impostato. Invece sembra essere indipendente dall'impostazione dei pulsanti del volume dell'hardware.

C'è un modo per un'app per Android di riprodurre un suono al volume fisico massimo consentito dal dispositivo?

risposta

38

Io suggerirei usando getStreamMaxVolume e setStreamVolume per fare questo:

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

Poi, una volta che hai finito basta riportarlo al volume originale.

penso di essere stato picchiato al punzone, ahh bene :)

Alcuni codice che fa in realtà questo, sto usando il MediaPlayer piuttosto che il Soundpool come questo ti dà una callback completo gioco che non lo fa sembrano essere presenti sul Soundpool:

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 la chiamata con mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); i valori streamVolume sono in realtà galleggia 0 -> 1, che rappresentano una percentuale del valore massimo in modo che ci si vuole veramente solo per mettere in 1.0f Là.

+0

Sì, tu eri ... ;-) Ma mi piace l'idea di ripristinare il volume originale, quindi quando l'app viene chiusa (o uccisa) l'utente ha il suo volume re-impostato ... – MarcoS

+0

Appena modificato, non lo faccio Penso che sia effettivamente necessario modificare il volume che serve per utilizzare il volume massimo piuttosto che il volume ridotto durante la riproduzione. – zeetoobiker

+0

Sì, è ancora meglio ... Grazie ... – MarcoS

4

È possibile regolare le impostazioni prima di riprodurre l'audio.

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

è AudioManager.getStreamMaxVolume() indipendente di regolazione di qualsiasi utente? È il volume fisico massimo del dispositivo? – MarcoS

+0

In realtà cambia le impostazioni dell'utente, quindi sì. – josephus

1
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

arrestandoli dopo il rilascio? –

-1

Questo è il codice sbagliato.

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
          audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 
+1

Il tuo codice dovrebbe essere nei commenti. –

1

Entrambi questi codici ha lavorato per me, ma io preferisco quello da 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(); 
}); 
Problemi correlati