Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo jugar sonido de timbre / alarma en Android

He estado buscando en todas partes cómo tocar un sonido de timbre / alarma en Android.

Presiono un botón y quiero tocar un sonido de timbre / alarma. No pude encontrar una muestra fácil 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(); } 

Consigo este error:

 04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for content://settings/system/ringtone 

Así que .. por favor, si alguien sabe cómo jugar un tono predeterminado / alarma me dejó saber.

Prefiero no subir ningún archivo. Simplemente reproduzca un tono de llamada predeterminado.

  • Android herramientas r17 x86 emulador - ¿por qué no puedo crear un x86 AVD?
  • Android emulador en ADT plugin no se ejecuta
  • Emulador se bloquea en la animación de inicio Esperando que HOME ('android.process.acore') se inicie
  • Gen ya existe pero no es una carpeta de origen
  • Inicio del emulador de Android en las herramientas de SDK, revisión 12
  • ¿En el emulador AVD cómo ver la carpeta sdcard? Y instalar apk a AVD?
  • Canal de entrada cerrado del editor o se ha producido un error. Eventos = 0x8
  • > 'Meteor run android' ejecuta la aplicación y lanza el emulador de Android pero no puedo encontrar o ejecutar la aplicación dentro del emulador
  • 11 Solutions collect form web for “Cómo jugar sonido de timbre / alarma en Android”

    Usted puede simplemente jugar un tono de llamada setted con esto:

     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); r.play(); 

    Si un usuario nunca ha configurado una alarma en su teléfono, TYPE_ALARM puede devolver null. Usted puede explicar esto con:

     Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); if(alert == null){ // alert is null, using backup alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // I can't see this ever being null (as always have a default notification) // but just incase if(alert == null) { // alert backup is null, using 2nd backup alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } } 

    Esta es la manera que he hecho:

     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); MediaPlayer mp = MediaPlayer.create(getApplicationContext(), notification); mp.start(); 

    Es similar a la manera de markov00, pero utiliza MediaPlayer en lugar de tono que evita la interrupción de otros sonidos, como la música, que ya podría estar jugando en segundo plano.

    Su ejemplo es básicamente lo que estoy usando. No funciona en el emulador, sin embargo, porque el emulador no tiene ningún tono de timbre por defecto, y el content://settings/system/ringtone no resuelve nada jugable. Funciona bien en mi teléfono real.

    Puede empujar un archivo MP3 en su carpeta / sdcard usando DDMS, reiniciar el emulador, abrir la aplicación Media, buscar en su archivo MP3, presionarla larga y seleccionar "Utilizar como tono de llamada del teléfono".

    ¡El error ha desaparecido!

    Editar: el mismo problema con los sonidos de notificación (por ejemplo, para SMS) resuelto mediante la aplicación Ringdroid

    Esto funciona bien:

     AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); MediaPlayer thePlayer = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); try { thePlayer.setVolume((float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)), (float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0))); } catch (Exception e) { e.printStackTrace(); } thePlayer.start(); 

    Copiar un archivo de audio a la tarjeta sd del emulador y seleccionarlo a través de reproductor de medios como el tono predeterminado de hecho resolver el problema.

    Puede utilizar este código de ejemplo:

     Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); Ringtone ringtoneSound = RingtoneManager.getRingtone(getApplicationContext(), ringtoneUri) if (ringtoneSound != null) { ringtoneSound.play(); } 
     public class AlarmReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { //this will update the UI with message Reminder inst = Reminder.instance(); inst.setAlarmText(""); //this will sound the alarm tone //this will sound the alarm once, if you wish to //raise alarm in loop continuously then use MediaPlayer and setLooping(true) Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); if (alarmUri == null) { alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); ringtone.play(); //this will send a notification message ComponentName comp = new ComponentName(context.getPackageName(), AlarmService.class.getName()); startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

    Para futuros googleadores: use RingtoneManager.getActualDefaultRingtoneUri() lugar de RingtoneManager.getDefaultUri() . Según su nombre, devolvería el uri real, así que usted puede utilizarlo libremente. De la documentación de getActualDefaultRingtoneUri() :

    Obtiene el Uri del sonido predeterminado actual. Esto dará el Uri de sonido real , en lugar de usar esto, la mayoría de los clientes pueden usar DEFAULT_RINGTONE_URI.

    Mientras tanto getDefaultUri() dice esto:

    Devuelve el Uri para el tono predeterminado de un tipo particular. En lugar de devolver el Uri de sonido del ringtone real, esto devolverá el Uri simbólico que se resuelve al sonido real cuando se reproduce.

    He aquí un ejemplo de código:

     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), notification); mediaPlayer.start(); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.