He estado buscando en todas partes cómo reproducir un tono de llamada / sonido de alarma en Android.
Presiono un botón y quiero reproducir un tono de llamada / sonido de alarma. No pude encontrar una muestra sencilla y directa. Sí, ya miré el código fuente del despertador ... pero no es sencillo y no puedo compilarlo.
No puedo hacer que esto funcione:
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, alert);
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.setLooping(true);
player.prepare();
player.start();
}
Me sale este error:
04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for
content://settings/system/ringtone
Entonces ... por favor, si alguien sabe cómo reproducir un tono de llamada / alarma predeterminado, hágamelo saber.
Prefiero no subir ningún archivo. Simplemente reproduce un tono de llamada predeterminado.
android
android-emulator
Federico
fuente
fuente
Si un usuario nunca ha configurado una alarma en su teléfono, TYPE_ALARM puede devolver un valor nulo. Puede dar cuenta de esto con:
fuente
null
así aunque no apunte a un sonido válido. Debería probar el valor de retorno deRingtoneManager.getRingtone()
for en sunull
lugar / tambiénEsta es la forma en que lo he hecho:
Es similar a la forma de markov00, pero usa MediaPlayer en lugar de Ringtone, lo que evita la interrupción de otros sonidos, como la música, que puede que ya se estén reproduciendo de fondo.
fuente
Tu ejemplo es básicamente lo que estoy usando. Sin embargo, nunca funciona en el emulador porque el emulador no tiene ningún tono de llamada predeterminado y
content://settings/system/ringtone
no se resuelve en nada reproducible. Funciona bien en mi teléfono real.fuente
Esto funciona bien:
fuente
Para los futuros googlers: use en
RingtoneManager.getActualDefaultRingtoneUri()
lugar deRingtoneManager.getDefaultUri()
. Según su nombre, devolvería el uri real, por lo que puede usarlo libremente. De documentación degetActualDefaultRingtoneUri()
:Mientras tanto
getDefaultUri()
dice esto:fuente
Puede insertar un archivo MP3 en su carpeta / sdcard usando DDMS, reiniciar el emulador, luego abrir la aplicación de Medios, buscar su archivo MP3, mantener presionado y seleccionar "Usar como tono de llamada del teléfono".
¡El error se ha ido!
Editar: el mismo problema con los sonidos de notificación (por ejemplo, para SMS) resuelto usando la aplicación Ringdroid
fuente
fuente
AlarmService
vieneCopiar un archivo de audio en la tarjeta SD del emulador y seleccionarlo a través del reproductor multimedia como tono de llamada predeterminado resuelve el problema.
fuente
Puede usar este código de muestra:
fuente
Puede que sea tarde, pero hay una nueva y sencilla solución a esta pregunta para quien la quiera.
En kotlin
El código anterior reproducirá el tono de llamada predeterminado, pero si desea una alarma predeterminada, cámbiela
a
fuente
Aquí hay un código de muestra:
fuente
mediaPlayer
lugar demp
.