Cómo obtener el nombre del tono en Android?
Permito que mi usuario elija un tono de llamada para notificaciones en mi aplicación. Quiero almacenar el URI del sonido junto con el título legible del sonido.
Hasta ahora el código URI funciona muy bien:
- Cómo configurar ringtone en Android de mi actividad?
- ¿Cómo se juega un tono de timbre que es sólo para Push Notification Arrivals de mi aplicación?
- ¿Cómo obtener preferencias de tono en tiempo de ejecución?
- El ajuste del tono de alarma personalizado en Android reproduce el tono predeterminado
- ¿Cómo obtener el tono de llamada actual en Android?
Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Pero cuando intento obtener el título, y lo pongo como un texto de botón, no consigo nada. Parece que no tiene título?
String title = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_TITLE); button.setText(title);
Pero el texto de mi botón está vacío. Si lo hago:
button.setText(uri.toString());
Entonces veo el uri perfectamente. ¿Debo tratar de obtener el título de la URI? Gracias
- ¿Cómo obtener URI actual / tono de llamada predeterminado para SMS entrantes?
- MediaPlayer setDataSource ha fallado con status = 0x80000000 para el tono establecido por filepath en 2.3.4
- Añadir tonos de llamada en el emulador de Android
- Preferencia de tono de tono
- ¿Puedo insertar un rasgo android: defaultValue para RingtonePreference, a través de XML?
- Cómo jugar ringtone una vez a través de MediaPlayer?
- Ajuste del sonido para la notificación
- cómo obtener el tipo de teléfono ringtone nombre en android programmatically en lugar de obtener ringtone id
Esto debería conseguirlo:
Ringtone ringtone = RingtoneManager.getRingtone(this, uri); String title = ringtone.getTitle(this);
Consulte http://developer.android.com/reference/android/media/Ringtone.html para obtener la documentación, pero el cuento: Ringtone.getTitle (Contexto ctx);
Personalmente tuve un serio problema de rendimiento cuando intenté la respuesta aceptada, tomó alrededor de 2 segundos para cargar una lista de 30 tonos de llamada. Lo cambié un poco y funciona 10 veces más rápido:
uri = ringtoneMgr.getRingtoneUri(cursor.getPosition()); ContentResolver cr = getContext().getContentResolver(); String[] projection = {MediaStore.MediaColumns.TITLE}; String title; Cursor cur = cr.query(uri, projection, null, null, null); if (cur != null) { if (cur.moveToFirst()) { title = cur.getString(0); cur.close();
Tuve problemas con 'MediaPlayer finalizado sin ser lanzado'. Yo uso esto:
Cursor returnCursor = getContentResolver().query(uri, null, null, null, null); returnCursor.moveToFirst(); String title = returnCursor.getString(returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); returnCursor.close();
Consulte la documentación en https://developer.android.com/training/secure-file-sharing/retrieve-info.html .
- Cómo cambiar el color de fondo del menú de ActionBar (android 4 y 5)
- La actividad con fragmentos no cambia de tamaño cuando se abre el teclado