19

我允许我的用户在我的应用中为通知选择铃声。我想将声音的 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 中获取标题吗?谢谢

4

3 回答 3

50

这应该得到它:

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

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

于 2013-10-04T18:09:16.493 回答
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();
于 2017-03-28T13:33:41.563 回答
0

我遇到了“MediaPlayer finalized without being released”的问题。我用这个:

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

于 2015-08-19T14:14:19.620 回答