2013-10-04 5 views
14

내 사용자가 내 앱에서 알림을 위해 벨소리를 선택할 수 있도록 허용하고 있습니다. 사람이 읽을 수있는 사운드 제목과 함께 사운드의 URI를 저장하려고합니다.안드로이드에서 벨소리 이름을 얻는 방법?

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

을하지만 제목을 얻고, 버튼 텍스트로 설정하려고 할 때, 난 아무것도하지 않습니다

는 지금까지 URI 코드는 잘 작동합니다. 제목이없는 것 같니?

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

하지만 내 버튼 텍스트가 비어 있습니다. 내가하는 경우 :

button.setText(uri.toString()); 

나는 uri를 완벽하게 본다. URI에서 제목을 얻으려고합니까?

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

이 문서에 대한 http://developer.android.com/reference/android/media/Ringtone.html를 참조하지만, 단편 소설 : 감사

답변

35

이 그것을 얻을해야 Ringtone.getTitle (컨텍스트 CTX를);

+0

감사합니다. 문서는 항상 나를 잡으려고합니다. – GuyLeStack

+4

ringtone.stop()을 호출하거나 누출 될 것입니다 !!! –

+0

+ Alexey Kuznetsov 당신은 무엇을 의미합니까? – TheLibrarianCz

0

'MediaPlayer는 출시되지 않고 마무리되었습니다'와 관련하여 문제가있었습니다. 나는 이것을 사용한다 :

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

설명서는 https://developer.android.com/training/secure-file-sharing/retrieve-info.html을 참조한다.

1

필자가 받아 들인 대답을 시도했을 때 개인적으로 심각한 성능 문제가 발생했습니다. 30 벨소리 목록을로드하는 데 약 2 초가 걸렸습니다. 조금 변경했는데 10 배 더 빨라졌습니다.

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(); 
관련 문제