Cómo abrir una lista de sonidos de notificación disponibles en Android

Estoy creando notificaciones en mi aplicación de Android, y me gustaría tener una opción en mis preferencias para establecer qué sonido se utiliza para la notificación. Sé que en la aplicación Configuración puedes elegir un sonido de notificación predeterminado en una lista. ¿De dónde viene esa lista, y hay una manera para que yo muestre la misma lista en mi aplicación?

Sólo copiar / pegar algún código de una de mis aplicaciones que hace lo que está buscando.

Esto se encuentra en un manejador onClick de un botón con la etiqueta "set ringtone" o algo similar:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null); this.startActivityForResult(intent, 5); 

Y este código captura la elección hecha por el usuario:

  @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { if (resultCode == Activity.RESULT_OK && requestCode == 5) { Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if (uri != null) { this.chosenRingtone = uri.toString(); } else { this.chosenRingtone = null; } } } 

Además, aconsejo a mis usuarios que instalen la aplicación "Rings Extended" del Android Market. Luego, cada vez que se abre este diálogo en su dispositivo, como desde mi aplicación o desde el menú de configuración del teléfono, el usuario tendrá la opción adicional de elegir cualquiera de los mp3 almacenados en su dispositivo, no sólo los tonos incorporados.

O simplemente pegar esto en sus preferencias XML:

  <RingtonePreference android:showDefault="true" android:key="Audio" android:title="Alarm Noise" android:ringtoneType="notification" /> 

Contenido completo de mi muestra XML sólo para contexto:

 <?xml version="1.0" encoding="UTF-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:title="Some value" android:key="someval" android:summary="Please provide some value" /> <EditTextPreference android:title="Some other value" android:key="someval2" android:summary="Please provide some other value" /> <RingtonePreference android:showDefault="true" android:key="Audio" android:title="Alarm Noise" android:ringtoneType="notification" /> </PreferenceScreen> 

Este es el método que utilizo para obtener una lista de sonidos de notificación disponibles en el teléfono 🙂

 public Map<String, String> getNotifications() { RingtoneManager manager = new RingtoneManager(this); manager.setType(RingtoneManager.TYPE_NOTIFICATION); Cursor cursor = manager.getCursor(); Map<String, String> list = new HashMap<>(); while (cursor.moveToNext()) { String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX); String notificationUri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX); list.put(notificationTitle, notificationUri); } return list; } 

EDIT: Esto es para el comentario acerca de cómo configurar el sonido en el NotificationCompat.Builder. Este método en su lugar obtiene el ID del ringtone que es lo que usa el teléfono, en lugar del TITLE legible por el otro método. Combine el uri y el id, y usted tiene la ubicación de tonos de llamada.

 public ArrayList<String> getNotificationSounds() { RingtoneManager manager = new RingtoneManager(this); manager.setType(RingtoneManager.TYPE_NOTIFICATION); Cursor cursor = manager.getCursor(); ArrayList<String> list = new ArrayList<>(); while (cursor.moveToNext()) { String id = cursor.getString(RingtoneManager.ID_COLUMN_INDEX); String uri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX); list.add(uri + "/" + id); } return list; } 

El código anterior devolverá una lista de cadenas como "content: // media / internal / audio / media / 27" . Luego puede pasar una de estas cadenas como un Uri en .setSound () como:

 .setSound(Uri.parse("content://media/internal/audio/media/27")) 

Espero que sea lo suficientemente claro 🙂

  • NotificationCompat 4.1 SetSmallIcon y SetLargeIcon
  • Notificación de desgaste de Android en la parte superior
  • ¿Cómo usar el estilo de notificación predeterminado?
  • enviar notificaciones push a varios dispositivos android usando GCM
  • ¿Cómo iniciar la notificación en la sincronización personalizada?
  • Cómo deshabilitar la barra de estado o barra de notificación, pero no deshabilitar la barra de título en android?
  • No se puede usar amarillo con el pequeño icono de Notificación de Nougat de Android
  • NotificationCompat android - cómo mostrar solo el icono grande sin pequeño
  • ¿Está FLAG_ONLY_ALERT_ONCE roto, o equivocado, o ambos?
  • Mostrar una barra de progreso continuo en la notificación, android?
  • Iluminar la pantalla cuando la notificación recibió android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.