媒体文件信息未在ContentResolver.query上更新

时间:2014-09-29 23:00:59

标签: android android-cursor android-contentresolver

我正在编写一个允许我更新媒体文件的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;
}

0 个答案:

没有答案