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


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?

  • Notificación de la actualización de la aplicación de Android
  • Notificación de Android para reproducir sólo sonido
  • Al hacer clic en Acciones de notificación de Android no cierra el cajón de notificaciones
  • Deshabilitar notificación de borrado para mi aplicación
  • ¿Error de notificación de la barra de estado personalizada de Android?
  • Java.lang.SecurityException: Requiere permiso de VIBRATE en Jelly Bean 4.2
  • Fondo de notificación en Android Lollipop es blanco. ¿Cómo puedo cambiarlo?
  • Java.lang.NoSuchMethodError: android.app.Notification $ Builder.build
  • 3 Solutions collect form web for “Cómo abrir una lista de sonidos de notificación disponibles en Android”

    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 🙂

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.