我陷入了棘手的境地。我首先使用音频选择器意图获取一个音频文件的媒体uri。但我需要向用户显示音频标题。所以我从下面的代码中获取它的标题并将其带入一个字符串数组列表,以便在列表视图中显示,因为我允许用户选择多个文件:
static ArrayList<String> list = new ArrayList<String>();
public String getTitlePathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Audio.Media.TITLE };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
但我的基本需求是将此音频文件设置为来自其他服务的铃声。所以我需要将媒体uri传递给服务而不是标题。有没有办法从它的标题中获取音频uri?或者是否有任何方法将另一个字符串值与数组列表中的元素相关联,但不在列表视图中显示它?
我目前正在使用DSLV(DragSort列表视图)作为我的列表视图,代码如下:
listView = (DragSortListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(this,
R.layout.item_layout, R.id.textView1, list);
listView.setAdapter(adapter);
listView.setDropListener(onDrop);
listView.setRemoveListener(onRemove);
DragSortController controller = new DragSortController(listView);
controller.setDragHandleId(R.id.drag_handle);
//controller.setClickRemoveId(R.id.);
controller.setRemoveEnabled(true);
controller.setSortEnabled(true);
controller.setDragInitMode(1);
//controller.setRemoveMode(removeMode);
listView.setFloatViewManager(controller);
listView.setOnTouchListener(controller);
listView.setDragEnabled(true);
谢谢