【问题标题】:Get recent files in android在android中获取最近的文件
【发布时间】:2020-08-26 08:01:43
【问题描述】:

我正在创建(尝试)一个文件管理器应用程序,我想在主要活动中显示最近的文件(所有类型)。我尝试了许多答案,这些答案只显示了如何只获取一种类型的媒体文件。有什么方法可以获取所有类型的近期媒体文件。

我尝试修改在网上找到的答案,但显示名称为 null。

val projection = arrayOf(
    MediaStore.Files.FileColumns._ID,
    MediaStore.Files.FileColumns.DISPLAY_NAME,
    MediaStore.Files.FileColumns.DATE_ADDED,
    MediaStore.Files.FileColumns.SIZE
)
val sortOrder = "${MediaStore.Files.FileColumns.DATE_ADDED} ASC limit 10"
applicationContext.contentResolver.query(
    MediaStore.Files.getContentUri(MediaStore.VOLUME_INTERNAL),
    projection,
    null,
    null,
    sortOrder
)?.use { cursor ->
    Log.e("TAG", ">> " + cursor.count)
    val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID)
    val nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME)
    while (cursor.moveToNext()) {
        Log.e("TAG", ">> " + cursor.getLong(idColumn))
        Log.e("TAG", ">> " + cursor.getString(nameColumn))
    }
}

【问题讨论】:

  • 是的。你可以。创建一个包含所有必要的 mimetype 的意图
  • 查看link
  • 嗨@MdBasha,我不想选择文件,而是想要最近的文件列表,就像我们使用 mediastore 一样。
  • 您的问题表明您有显示一种最近的媒体文件的解决方案。获取使用 mimetypes 修改的代码以显示所有类型或生成最小可重现代码
  • 嗨@MdBasha,检查我更新的问题。

标签: android


【解决方案1】:

试试

private void Recentfilelist() {
        try {
            

            Uri internalUri= MediaStore.Files.getContentUri(MediaStore.VOLUME_INTERNAL):


            projection=new String[]{MediaStore.Files.FileColumns._ID,
                    MediaStore.Files.FileColumns.TITLE,
                    MediaStore.Files.FileColumns.DATE_ADDED,
                    MediaStore.Files.FileColumns.SIZE};

            String selection =null;

            String[] selectionArgs = null;

            String sortOrder = MediaStore.Audio.Media.DATE_ADDED + " ASC";

            Cursor recentfilesCursor = getContentResolver().query(internalUri, projection, selection, selectionArgs, sortOrder);

            if (recentfilesCursor != null) {
                if (recentfilesCursor.moveToFirst()) {
                    do {
                        int filetitle = recentfilesCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
                        int file_id = recentfilesCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);
                        int filePath = recentfilesCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
                        Mediafileinfo info = new Mediafileinfo();
                        info.setData(new File(new File(recentfilesCursor.getString(filedata)).getParent()).getName());
                        info.setTitle(recentfilesCursor.getString(filetitle));
                        info.set_id(recentfilesCursor.getString(file_id));
                        mediaList.add(info);
                    } while (recentfilesCursor.moveToNext());
                }
            }
            assert recentfilesCursor != null;
            recentfilesCursor.close();
} catch (Exception e) {
                e.printStackTrace();
            }
        }

【讨论】:

  • 将 DISPLAY_NAME 替换为 TITLE。此代码用于文件类型。对于音频、视频、图像,使用之前的link 共享,所有这些都更新了一个通用的 medialist 数组。在 mainactivity 中填充数组值。就是这样。
  • 嗨@MdBasha,我今天会尝试并告诉你会发生什么。
  • 嗨@MdBasha,现在它正在显示名称,但我无法识别文件名,可能是系统文件,但它不像其他文件管理器那样显示最近的文件。
  • 嗨 Porush,对于迟到的回复,我深表歉意。你解决了吗?
  • 嗨@MdBasha。不,我仍然卡住了,所以在我找到可行的解决方案之前暂停这个项目。
猜你喜欢
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2015-10-26
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多