2013-10-04 16 views
14

Permetto al mio utente di selezionare una suoneria per le notifiche nella mia app. Voglio memorizzare l'URI del suono insieme al titolo leggibile umano del suono.Come ottenere il nome della suoneria in Android?

Finora il codice URI grandi opere:

Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

Ma quando provo ad ottenere il titolo, e impostarlo come un testo del pulsante, non ottengo nulla. Sembra non avere alcun titolo?

String title = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_TITLE); 
button.setText(title); 

Ma il testo del mio pulsante è vuoto. Se lo faccio:

button.setText(uri.toString()); 

quindi vedo perfettamente l'uri. Dovrei solo cercare di ottenere il titolo dall'URI? Grazie

risposta

35

Questo dovrebbe ottenerlo:

Ringtone ringtone = RingtoneManager.getRingtone(this, uri); 
String title = ringtone.getTitle(this); 

Fare riferimento alla http://developer.android.com/reference/android/media/Ringtone.html per la documentazione, ma il racconto: Ringtone.getTitle (Context CTX);

+0

Grazie. I documenti sembrano sempre prendermi. – GuyLeStack

+4

Chiama ringtone.stop() o perderà !!! –

+0

+ Alexey Kuznetsov cosa intendi? – TheLibrarianCz

0

Ho avuto problemi con "MediaPlayer finalizzato senza essere rilasciato". Io uso questo:

Cursor returnCursor = getContentResolver().query(uri, null, null, null, null); 
returnCursor.moveToFirst(); 
String title = returnCursor.getString(returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); 
returnCursor.close(); 

Fare riferimento alla https://developer.android.com/training/secure-file-sharing/retrieve-info.html per la documentazione.

1

Personalmente ho avuto un problema di prestazioni gravi quando ho provato la risposta accettata, ci sono voluti circa 2 secondi per caricare solo un elenco di 30 suonerie. Ho cambiato un po 'e funziona circa 10 volte più veloce:

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();