2009-03-10 13 views
33

Ho un'app che riproduce suoni intermittenti mentre la sua attività è aperta e l'utente si aspetta sempre che faccia questi rumori, ma sfortunatamente è limitato dal volume del flusso musicale. Le opzioni che ho scoperto sono quindi:Come posso gestire in modo sano i volumi audio nella mia app per Android?

  • Regolare il volume del flusso musicale, probabilmente assordante l'utente se si tratta di riprodurre musica in quel momento.
  • chiamata MediaPlayer.setVolume(), che è inefficace se il volume della musica in streaming è 0.
  • pulsante del volume maniglia mi preme che presenta due aspetti: la pressione dei pulsanti volume Regolare il volume della suoneria a meno che il mio audio è in riproduzione, e sono stato non ancora riuscito a rilevare l'evento onKey per un pulsante del volume, premere utilizzando il mio OnKeyListener. Se ci fosse un modo per forzare l'aggiustamento da applicare al flusso musicale mentre la mia attività è focalizzata, o semplicemente prendere il pulsante mi preme, questo funzionerebbe.
  • Riproduci un brano audio in loop silenzioso in background per mantenere il flusso musicale nel contesto delle regolazioni del volume.
  • Penso che la terza opzione sia probabilmente la migliore poiché non consente il controllo del volume all'utente, ma se ci fosse un modo per sovrascrivere il volume di sistema in una singola istanza di mediaplayer che avrebbe funzionato.

    +0

    questa risposta qui http://stackoverflow.com/a/17900273/1979347 –

    risposta

    70

    ha ottenuto un altro suggerimento tramite Google Gruppi, che è la soluzione piattaforma integrata che cercavo e funziona bene:

    Si prega di non gestire i tasti del volume te stesso - è quasi impossibile garanzia che si non interromperà il comportamento delle chiavi del volume.

    chiamata questa API nel vostro onCreate():

    setVolumeControlStream (AudioManager.STREAM_MUSIC);

    Questo dice al AudioManager che quando l'applicazione è attiva, le chiavi del volume devono regolare il volume della musica quando l'applicazione è .

    +0

    AGRH ! Grazie amico, ho avuto esattamente lo stesso problema (e come idiota trascorso 2 ore di debug il mio codice di riproduzione audio ...) – kape123

    +1

    Grazie. È stato difficile trovare questo da googling. Al diavolo, le persone nel forum di sviluppo Android ufficiale stavano dicendo di prendere le chiavi del volume. Anch'io ho pensato che fosse una cattiva idea, quindi grazie per aver trovato questo. –

    +0

    @Luke Grazie. questo è quello che stavo cercando. – AD14

    2

    È utile per questa API: setVolumeControlStream (AudioManager.STREAM_MUSIC);

    A meno che non spenda più tempo per correggere il bug del volume.

    0

    Questo non è di aiuto se si esegue l'override del metodo onKeyDown (int keycode, KeyEvent event) di un'attività.

    1

    Se si utilizza il metodo 'OnKeyDown', è possibile aggirare questo problema nel modo seguente:

    public boolean onKeyDown(int keyCode, KeyEvent event) {  
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
           setVolumeControlStream(AudioManager.STREAM_MUSIC);}} 
    
    Problemi correlati