2010-11-01 10 views
6

He intentado utilizar SoundPool para reproducir el tono de llamada predeterminado sin éxito. En el código siguienteReproducción del tono de llamada predeterminado

String ringtone = Settings.System.DEFAULT_RINGTONE_URI.getPath(); 
SoundPool ringPhone = new SoundPool(2, AudioManager.STREAM_RING, 1); 
int soundID = ringPhone.load(Settings.System.DEFAULT_RINGTONE_URI.getPath(), 1); 
int soundID = ringPhone.load(ringtone, 1); 
ringPhone.play(soundID, 0.99f, 0.99f, 1, 0, 1); 

Aparece el mensaje "error cargando contenido/sistema/tono de llamada muestra 0 no LISTO". Reemplazar el URI con una ruta difícil a un archivo mp3 existente en la tarjeta SD produce resultados similares.

¿Qué estoy haciendo mal? Gracias,

Kyle

Respuesta

18

es probable que no quieren estar utilizando el soundpool para este tipo de reproducción de audio. SoundPool se usa generalmente para reproducir fragmentos de audio muy pequeños, almacenados como archivos locales, incluso más pequeños que la mayoría de los tonos de llamada. Debería considerar MediaPlayer en su lugar. A continuación se debe trabajar muy bien:

MediaPlayer player = MediaPlayer.create(this, 
    Settings.System.DEFAULT_RINGTONE_URI); 
player.start(); 

Aunque si no tiene permiso para acceder a ese tono de llamada desde la aplicación, se puede conseguir una FileNotFoundException.

+0

Gracias - esto es exactamente lo que necesitaba. Simple, y lo hizo muy bien –

+0

Buena respuesta. Solo un FYI no necesita llamar a prepare() en caso de utilizar Factory Method create(). – IronBlossom

+0

Usted es correcto IronBlossom. El código ha sido editado para eliminar prepare(). –

Cuestiones relacionadas