2013-10-04 13 views
14

Tôi cho phép người dùng của mình chọn nhạc chuông cho thông báo trong ứng dụng của mình. Tôi muốn lưu trữ URI của âm thanh cùng với tiêu đề có thể đọc được của con người.Cách nhận tên nhạc chuông trong Android?

Cho đến nay mã URI hoạt động tuyệt vời:

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

Nhưng khi tôi cố gắng để có được những danh hiệu, và thiết lập nó như là một văn bản nút, tôi không nhận được bất cứ điều gì. Dường như không có tiêu đề?

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

Nhưng văn bản nút của tôi trống. Nếu tôi làm:

button.setText(uri.toString()); 

thì tôi thấy uri hoàn hảo. Tôi có nên thử lấy tựa đề từ URI không? Cảm ơn

Trả lời

35

này sẽ nhận được nó:

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

Tham khảo http://developer.android.com/reference/android/media/Ringtone.html cho các tài liệu, nhưng những câu chuyện ngắn: Ringtone.getTitle (Context ctx);

+0

Cảm ơn. Tài liệu dường như luôn giúp tôi. – GuyLeStack

+4

Gọi nhạc chuông.stop() hoặc nó sẽ bị rò rỉ !!! –

+0

+ Alexey Kuznetsov ý của bạn là gì? – TheLibrarianCz

0

Tôi gặp sự cố với 'MediaPlayer đã hoàn tất mà không bị hủy bỏ'. Tôi sử dụng điều này:

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

Tham khảo https://developer.android.com/training/secure-file-sharing/retrieve-info.html cho tài liệu.

1

Cá nhân tôi gặp sự cố nghiêm trọng về hiệu suất khi tôi thử câu trả lời được chấp nhận, mất khoảng 2 giây để tải danh sách 30 nhạc chuông. Tôi đã thay đổi nó một chút và nó hoạt động nhanh hơn khoảng 10 lần:

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(); 
Các vấn đề liên quan