我正在编写一个允许我更新媒体文件的Android应用程序。 我有一个AsyncTask(除其他外)扫描设备的媒体文件。
下面的代码是用于获取所有媒体文件并创建FileInfo列表的方法(我的类,保存文件的基本元数据)。
问题是从Cr().query
收到的数据总是一样的,没有带来最新的更新。
我查看了this similar issue,但您可以看到我的代码在那里推荐了解决方案,但我仍然获得旧数据而不是刷新数据。
我花了一段时间才弄明白这是问题所在,但我现在在日志语句Log.d("scanLocalFiles", "" + fileInfos.size() + "|" + data + ":" + size );
的输出中清楚地看到了
我知道已更改的文件仍以原始大小显示。
(我知道它已被更改,因为我在ES-FileExplorer上看到了更新的...)
有关可能发生的事情的任何建议吗?
感谢。
以下代码:
private List<FileInfo> scanLocalFiles(Uri... uris)
{
List<FileInfo> fileInfos = new ArrayList<FileInfo>();
String[] projection = new String[]{
MediaStore.MediaColumns._ID,
MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.SIZE,
MediaStore.MediaColumns.MIME_TYPE
};
for (int u=0; u < uris.length; u++)
{
Uri uri = uris[u];
//Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cur = Cr().query(uri,
projection, // Which columns to return
"", // Which rows to return (all rows)
null, // Selection arguments (none)
"" // Ordering
);
if(cur!=null && cur.moveToFirst())
{
try
{
int idColumn = cur.getColumnIndex(projection[0]);
int dataColumn = cur.getColumnIndex(projection[1]);
int sizeColumn = cur.getColumnIndex(projection[2]);
int mimeColumn = cur.getColumnIndex(projection[3]);
do
{
Uri id = Uri.withAppendedPath(uri, cur.getString(idColumn));
String data = cur.getString(dataColumn);
long size = cur.getLong(sizeColumn);
String mime = cur.getString(mimeColumn);
Log.d("scanLocalFiles", "" + fileInfos.size() + "|" + data + ":" + size );
fileInfos.add(new FileInfo(id, data, size, mime));
} while (cur.moveToNext());
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
cur.close();
}
}
}
return fileInfos;
}