我有videoplayer应用程序,文件浏览器列出了SD卡上的所有视频
受i want get audio files in sd card启发的代码
使用ContentResolver,按预期工作,但如果卡上的文件发生更改,则不会更新。我不是自动意思,但在视图/应用程序重启后。甚至没有重新安装应用程序帮助,仍然显示相同的文件。删除的视频文件无法通过PC显示,也无法播放(此视频无法播放(翻译))。
我转储了数据,问题不在视图缓存或其他地方。我没有实现自己的任何缓存,也没有找到任何关于此事的内容。谢谢
代码:
// acquisition
String[] projection = {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.DATA
};
ContentResolver resolver = getActivity().getContentResolver();
Cursor videoCursor = resolver.query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
null
);
// extraction
while(cursor.moveToNext()) {
cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
filepath = cursor.getString(cursorIndex);
cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
filename = cursor.getString(cursorIndex);
cursorIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
duration = cursor.getString(cursorIndex);
result[ index++ ] = new VideoFileMetadata(filename, duration, filepath);
}
编辑1 [14-03-2013]:
我尝试将number + " = " + number
添加到ORDER或WHERE子句中以充当潜在的查询缓存,但它没有任何效果(虽然它可能被优化器删除为无用子句)。这次我使用不同的证书从不同的机器重新安装了应用程序,但查询结果保持不变,列出了当前不存在的文件。
答案 0 :(得分:4)
您应该先致电cursor.moveToFirst()
。
因此,您的游标迭代循环应该看起来像
if (cursor.moveToFirst()) {
do {
// cursorIndex = cursor.getColumnIndexOrThrow, etc...
} while (cursor.moveToNext());
}