如何在Android中获取铃声名称?

我允许用户在我的应用中为通知选择铃声。我想存储声音的URI以及声音的人类可读标题。

到目前为止,URI代码运行良好:

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

但是当我尝试获取标题并将其设置为按钮文本时,我没有得到任何东西。似乎没有头衔?

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

但我的按钮文本是空的。如果我这样做:

button.setText(uri.toString());

然后我完美地看到了uri。我应该尝试从 URI 获取标题吗?谢谢


答案 1

这应该得到它:

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

请参阅 http://developer.android.com/reference/android/media/Ringtone.html 以获取文档,但要参考短篇小说:Ringtone.getTitle(Context ctx);


答案 2

当我尝试接受的答案时,我个人遇到了严重的性能问题,只需加载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();

推荐