【问题标题】:Uri.parse("file://" + ???); to access specific folderUri.parse("file://" + ???);访问特定文件夹
【发布时间】:2017-04-11 01:02:28
【问题描述】:

我的问题分为两部分,如何获取以下代码来访问此位置: "/storage/emulated/0/Movies/SpecificFolder"

代码:

private Uri getUriFromMediaStore(int position) {
        int dataIndex = mMediaStoreCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA);

        mMediaStoreCursor.moveToPosition(position);

        String dataString = mMediaStoreCursor.getString(dataIndex);
        Uri mediaUri = Uri.parse("file://" + dataString);
        return mediaUri;
    }

而且,到时候我如何从在线服务器访问视频/文件?

我尝试了以下方法:

mediaCursor = getContentResolver().query( MediaStore.Files.getContentUri("external"), 
                null, 
                MediaStore.Images.Media.DATA + " like ? ", 
                new String[] {"%YOUR_FOLDER_NAME%"}, 
                null);

但是,getContentResolver() 只能在我的类扩展“Activity”时使用,它没有,我继承自:

RecyclerView.Adapter<MediaStoreAdapter.ViewHolder>

Java 不允许双重继承。

【问题讨论】:

  • 第1部分,你可以试试这个:File movieDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Movies" + File.separator + "SpecificFolder");
  • 尝试Uri.fromFile(movieDir); 获取 Uri。 ;)
  • 为了显示文件夹中的所有视频,我会试试这个:movieDir.listFiles(); 在我确保 movieDir.isDirectory() 为 true 之后。并通过后缀判断文件是否为视频。
  • @RustFisher 嗯,您的评论合乎逻辑并且应该有效。但我的 gridview 现在只是显示为空白。我试图让我的 gridview 显示文件夹中的所有视频。我也试过:Uri mediaUri = Uri.parse(Environment.getExternalStorageDirectory().getAbsol‌​utePath() + File.separator + "Movies" + File.separator + "SpecificFolder" + dataString);
  • @RustFisher 仍然没有使用 movieDir.listFiles();我想可能是因为我构建使用 getColumnIndex 的方法的方式

标签: android file path uri mediastore


【解决方案1】:

我弄错了代码的哪一部分需要编辑才能访问特定文件夹。我试图编辑光标显示它选择/接收的缩略图的代码部分,而需要做的是限制光标从使用 SQLite 获取图像/视频的位置。

最初遵循本教程: https://www.youtube.com/watch?v=R23RBPkO8BY&list=PL9jCwTXYWjDJ6o1uabT54z1YmYYBh9US6&index=6

在 Nigel Henshaw 对 Codementors 的帮助下,他能够提供这个解决方案并希望我分享: https://www.codementor.io/mobapptuts

在 MainActivity 中,我们首先设置 Cursor:

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        String[] projection = {
                MediaStore.Files.FileColumns._ID,
                MediaStore.Files.FileColumns.DATE_ADDED,
                MediaStore.Files.FileColumns.DATA,
                MediaStore.Files.FileColumns.MEDIA_TYPE
        };
        String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE
                + " OR "
                + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO
                + MediaStore.Video.Media.DATA;
        return new CursorLoader(
                this.getContext(),
                MediaStore.Files.getContentUri("external"),
                projection,
                selection,
                null,
                MediaStore.Files.FileColumns.DATE_ADDED + " DESC"
        );
    }

指定单个文件夹的代码:

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        String[] projection = {
                MediaStore.Files.FileColumns._ID,
                MediaStore.Files.FileColumns.DATE_ADDED,
                MediaStore.Files.FileColumns.DATA,
                MediaStore.Files.FileColumns.MEDIA_TYPE
        };
        String selection = "(" + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE + " AND "
                + MediaStore.Images.Media.DATA + " LIKE ? )"
                + " OR "
                + "(" + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO + " AND "
                + MediaStore.Video.Media.DATA + " LIKE ? )";
        String [] selectionArgs = new String[] {"%SpecificFolder%", "%SpecificFolder%"};
        return new CursorLoader(
                this.getContext(),
                MediaStore.Files.getContentUri("external"),
                projection,
                selection,
                selectionArgs,
                MediaStore.Files.FileColumns.DATE_ADDED + " DESC"
        );
    }

此解决方案同时处理您文件夹中的图像和视频。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2010-09-09
    • 1970-01-01
    • 2016-12-14
    • 2015-05-28
    • 2021-10-01
    • 1970-01-01
    • 2015-11-12
    相关资源
    最近更新 更多