我有带有文件浏览器的视频播放器应用程序,其中列出了 SD 卡上的所有视频
受我想在 sd 卡中获取音频文件启发的代码
使用 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 子句以充当潜在的查询缓存破坏者,但它没有效果(尽管它有可能被优化器作为无用的子句删除)。这次我使用不同的证书从另一台机器重新安装了应用程序,但查询结果保持不变,列出当前不存在的文件。