2011-06-24 7 views

Respuesta

67
public void playSound(Context context) throws IllegalArgumentException, 
               SecurityException, 
               IllegalStateException, 
               IOException { 

    Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    MediaPlayer mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.setDataSource(context, soundUri); 
    final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

    if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) { 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
     mMediaPlayer.setLooping(true); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.start(); 
    } 
} 

he encontrado otra respuesta:

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

mérito es de https://stackoverflow.com/a/9622040/737925

+6

Utilicé ese código y me molestó que el sonido se repitiera. Ahora veo el problema: 'mMediaPlayer.setLooping (true);' ¿Por qué quieres que ese sonido se repita? –

+3

@ SimonAndréForsberg depende del deseo del desarrollador –

+1

¿Importa que mMediaPlayer salga del alcance y esté disponible para ser recogido antes de que el sonido haya terminado de reproducirse, o el sonido ya se haya transmitido a los componentes de nivel inferior que garantizarán que termine de reproducirse? la llamada 'mMediaPlayer.start()'? – ahcox

71

... utilizar el sonido de aviso por defecto de Android (como cuando se ajusta el volumen del timbre ) ..

En mi Cyanogen 7 Nexus One y mi viejo de T-Mobile Pulse Mini (el último de la memoria), por lo que yo puedo escuchar, esto es exactamente el sonido de aviso predeterminado en el cambio de volumen:

 final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100); 
    tg.startTone(ToneGenerator.TONE_PROP_BEEP); 

usted parece estar pidiendo una alternativa a ToneGenerator, pero creo que te da exactamente lo que quieres en dos líneas.

Aquí están algunas otras probabilidades ToneGenerator suena He intentado que no fuera un partido (los dos primeros podrían ser útiles como suplentes en el volumen del bip):

 // Double beeps:  tg.startTone(ToneGenerator.TONE_PROP_ACK); 
    // Double beeps:  tg.startTone(ToneGenerator.TONE_PROP_BEEP2); 
    // Sounds all wrong: tg.startTone(ToneGenerator.TONE_CDMA_KEYPAD_VOLUME_KEY_LITE); 
+0

Lo mejor sería usar un tono continuo como los de ToneGenerator.TONE_DTMF_0 a ToneGenerator.TONE_DTMF_S o de lo contrario el pitido se interrumpirá y comenzará de nuevo en función de la descripción del tono seleccionado. Esto sucederá si su durationMs (pasada como param en startTone (int toneType, int durationMs) es mayor que la duración total del tono. – ungalcrys

+0

Hola @ungalcrys, no estoy en posición de volver a verificar esto fácilmente en este momento, pero el interrogador me lo pidió: "sonido de pitido predeterminado de Android (como cuando ajusta el volumen del timbre)". Cuando lo probé, ese fue exactamente el que di más arriba: 'ToneGenerator.TONE_PROP_BEEP'. – ahcox

+0

¿Alguien tenía algún problema con el S6 Edge? El ToneGenerator funciona bien en el S6, pero el S6 Edge no me da nada. –

0

el camino más fácil es utilizar instancia de classe ToneGenerator :

//declaration 
    ToneGenerator toneG; 
    //using any where` 
    if(val>=taux_max) 
    { 
     taux_text.setTextColor(warnning_col); 
     toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); //200 is duration in ms 
    } 
Cuestiones relacionadas