2012-07-02 11 views
5

Ho questo metodo nella mia attività principaleCome impostare il volume del suono di notifica a livello di programmazione?

private void beep() 
{ 
    AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, 
      AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND); 
    Uri notification = RingtoneManager 
      .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), 
      notification); 
    r.play(); 
} 

quanto ho capito, il volume del suono di notifica dovrebbe essere regolata da STREAM_NOTIFICATION. Ma la notifica suona sempre con lo stesso volume nonostante quel numero di volume nel metodo setStreamVolume. Perché?

risposta

5

Sono andato in un altro modo. Non è esattamente la risposta alla mia domanda ma appropriata. Quando suono la notifica in STREAM_MUSIC, tutto va bene. Così notifica gioca esattamente con il volume mi passa come parametro alla funzione

private void beep(int volume) 
{ 
    AudioManager manager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    manager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0); 

    Uri notification = RingtoneManager 
      .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

    MediaPlayer player = MediaPlayer.create(getApplicationContext(), notification); 
    player.start(); 
} 
+0

L'audio è ancora in riproduzione quando la notifica è disattivata dalle impostazioni del dispositivo. Qualcuno si trova ad affrontare questo problema usando il codice sopra? Nota: sto utilizzando l'ultima libreria di GCM. –

2

Prima di tutto, spero che tu ti renda conto che stai tentando di eseguire due notifiche una di seguito all'altra, quindi potrebbe esserci un conflitto in merito. AudioManager.FLAG_PLAY_SOUND e r.play() tenteranno entrambi di riprodurre il suono. Di solito è sufficiente fornire all'utente un tipo di informazione, sia dall'interfaccia utente sia suonando il beep con un nuovo volume. Ti suggerisco di cancellare una delle bandiere. Se non è necessario alcun, basta dare 0.

Venendo alla domanda principale, non sono sicuro se è possibile impostare il livello del volume a 0. provare a mettere 1, come

manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 1, AudioManager.FLAG_SHOW_UI); 

Se desidera disattivare l'avviso, provare a utilizzare setStreamMute, che equivale a impostare il volume su 0.

+0

Non aiuta. Ho rimosso entrambi i flag, ma la notifica viene comunque riprodotta con lo stesso volume quando inserisco ** 1 ** o ** 7 ** –

+0

Hai aggiunto l'autorizzazione MODIFY_AUDIO_SETTINGS nel file manifest? – Erol

+0

No. Non è cambiato nulla dopo aver aggiunto questa sezione in manifest -

-1

Scrivere una funzione come segue, o copiare e incollare il seguente,

public void ringtone() { 
    try { 
     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
     r.play(); 
    } catch (Exception e) {} 
} 

e chiamare ringtone() quando si vuole fare un beep notifica.

+0

ha funzionato perfettamente per me ... spero che ti possa aiutare ... – Ragu

Problemi correlati