【问题标题】:How to sort Uri Array by Date/Time?如何按日期/时间对 Uri 数组进行排序?
【发布时间】:2020-02-29 03:45:42
【问题描述】:

是否可以按日期/时间对包含 Uri 的数组进行排序?

我的数组中的一个 Uri 看起来像:

content://media/external/images/media/65

我尝试过Collections.sort(),但使用 Uri[] 是不可能的

编辑: 我的 Uri 指向存储在设备上的图像。我想按日期和时间对图像进行排序,并将其显示在 GridView 中。

【问题讨论】:

  • date/time 是什么意思?
  • A Uri 没有“日期/时间”。它可能指向可能具有某种时间戳的 content。您需要更详细地解释您所指的“日期/时间”。
  • 您是指文件创建日期、最后文件访问日期、文件修改日期吗?
  • @KrystianG 我的意思是文件创建日期。
  • 如果您使用的 API 早于 26 (Android 8.0),您将无法在 Android 上获取文件创建日期。您只能获取上次修改时间。 stackoverflow.com/questions/2389225/…

标签: java android arrays sorting


【解决方案1】:

您可以查询内容解析器的修改时间。

Uri uri = Uri.parse("content://media/external/images/media/65");

                String projection [] = { 
                          MediaStore.Images.Media.DATA
                        , MediaStore.Images.Media.DISPLAY_NAME
                        , MediaStore.Images.Media.SIZE
                        , MediaStore.Images.Media.MIME_TYPE
                        , MediaStore.Images.Media.DATE_MODIFIED
                        , DocumentsContract.Document.COLUMN_LAST_MODIFIED
                        };
                Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

                if ( cursor==null)
                {   

                return; 
                }

                cursor.moveToFirst();

                String data        = cursor.getString(0);
                String displayName = cursor.getString(1);
                String size        = cursor.getString(2);
                String mimeType    = cursor.getString(3);
                String dateModified    = cursor.getString(4); // null
                String dateModified2    = cursor.getString(5);

                Toast.makeText(context,
                             "DISPLAY_NAME: " + displayName
                            + "\nDATA: " + data
                            + "\nSIZE: " + size
                                + "\nmimeType: " + mimeType
                                + "\n" +MediaStore.Images.Media.DATE_MODIFIED + ": " + dateModified
                                + "\n" +DocumentsContract.Document.COLUMN_LAST_MODIFIED + ": " + dateModified2
                            , Toast.LENGTH_LONG).show();
                cursor.close();         

即使是来自媒体商店的 uris 也为 MediaStore.Images.Media.DATE_MODIFIED ("date_modified") 因此 DocumentsContract.Document.COLUMN_LAST_MODIFIED ("last_modified") 这对所有人都有好处。

添加一个 try 和一些 catch 块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 2019-01-16
    • 2013-10-26
    相关资源
    最近更新 更多