2013-10-04 13 views
14

Ich erlaube meinem Benutzer, einen Klingelton für Benachrichtigungen in meiner App auszuwählen. Ich möchte den URI des Sounds zusammen mit dem menschlich lesbaren Titel des Sounds speichern.Wie bekomme ich den Namen eines Klingeltons in Android?

Bisher ist der URI-Code funktioniert gut:

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

Aber wenn ich versuche, den Titel zu bekommen, und es als Button Text gesetzt, ich habe nichts bekommen. Scheint keinen Titel zu haben?

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

Aber meine Schaltfläche Text ist leer. Wenn ich das tue:

button.setText(uri.toString()); 

dann sehe ich das uri perfekt. Sollte ich nur versuchen, den Titel von der URI zu bekommen? Dank

Antwort

35

Dies sollte es bekommen:

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

für die Dokumentation zu http://developer.android.com/reference/android/media/Ringtone.html finden, aber die kurze Geschichte: Ringtone.getTitle (Context ctx);

+0

Danke. Docs scheinen mich immer zu verstehen. – GuyLeStack

+4

Anruf ringtone.stop() oder es wird leck !!! –

+0

+ Alexey Kuznetsov was meinst du? – TheLibrarianCz

0

Ich hatte Probleme mit 'MediaPlayer finalisiert, ohne veröffentlicht zu werden'. Ich benutze diese:

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

für die Dokumentation zu https://developer.android.com/training/secure-file-sharing/retrieve-info.html finden.

1

Ich persönlich hatte ein ernstes Leistungsproblem, als ich die angenommene Antwort versuchte, dauerte es ungefähr 2 Sekunden, um nur eine Liste von 30 Klingeltönen zu laden. Ich änderte es ein bisschen und es funktioniert ungefähr 10x schneller:

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