Android parse(“file://”和“#x2B;”);访问特定文件夹的步骤

Android parse(“file://”和“#x2B;”);访问特定文件夹的步骤,android,file,path,uri,mediastore,Android,File,Path,Uri,Mediastore,我的问题分为两部分,如何获取以下代码以访问此位置: “/storage/emulated/0/Movies/specific文件夹” 代码: 而且,到时候我如何从在线服务器访问视频/文件 我尝试了以下方法: mediaCursor = getContentResolver().query( MediaStore.Files.getContentUri("external"), null, MediaStore.Images.Me

我的问题分为两部分,如何获取以下代码以访问此位置: “/storage/emulated/0/Movies/specific文件夹”

代码:

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

我尝试了以下方法:

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>
RecyclerView.Adapter

Java不允许双重继承。

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

最初遵循本教程:

在Nigel Henshaw对Codementors的帮助下,他能够提供这个解决方案,并希望我与大家分享:

在MainActivity中,我们首先设置光标:

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 onCreateLoader(int-id,Bundle-args){
字符串[]投影={
MediaStore.Files.FileColumns.\u ID,
添加了MediaStore.Files.FileColumns.DATE\u,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.MEDIA\u类型
};
字符串选择=MediaStore.Files.FileColumns.MEDIA\u TYPE+“=”
+MediaStore.Files.FileColumns.MEDIA\u类型\u图像
+“或”
+MediaStore.Files.FileColumns.MEDIA_TYPE+“=”
+MediaStore.Files.FileColumns.MEDIA\u类型\u视频
+MediaStore.Video.Media.DATA;
返回新游标装入器(
这是.getContext(),
MediaStore.Files.getContentUri(“外部”),
投影,
选择,
无效的
MediaStore.Files.FileColumns.DATE_添加+“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"
        );
    }
public Loader onCreateLoader(int-id,Bundle-args){
字符串[]投影={
MediaStore.Files.FileColumns.\u ID,
添加了MediaStore.Files.FileColumns.DATE\u,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.MEDIA\u类型
};
字符串选择=“(“+MediaStore.Files.FileColumns.MEDIA_TYPE+”=”
+MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE+“和”
+MediaStore.Images.Media.DATA+“喜欢吗?”
+“或”
+“(“+MediaStore.Files.FileColumns.MEDIA_TYPE+”=”
+MediaStore.Files.FileColumns.MEDIA\u TYPE\u VIDEO+“和”
+MediaStore.Video.Media.DATA+“喜欢吗?”;
字符串[]SelectionAgs=新字符串[]{“%SpecificFolder%”,“%SpecificFolder%”;
返回新游标装入器(
这是.getContext(),
MediaStore.Files.getContentUri(“外部”),
投影,
选择,
精选,
MediaStore.Files.FileColumns.DATE_添加+“DESC”
);
}

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

对于第1部分,您可以尝试以下操作:
File movieDir=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+“Movies”+File.separator+“SpecificFolder”)
try
Uri.fromFile(movieDir)以获取Uri。;)为了显示文件夹中的所有视频,我将尝试以下操作:
movieDir.listFiles()在我确保
movieDir.isDirectory()
为true之后。并根据后缀判断文件是否为视频。嗯,你的评论合乎逻辑,应该有效。但是我的gridview现在显示为空白。我正在尝试让我的gridview显示文件夹中的所有视频。我还尝试了:Uri mediaUri=Uri.parse(Environment.getExternalStorageDirectory().getAbsol‌​utePath()+File.separator+“Movies”+File.separator+“SpecificFolder”+数据字符串)@RustFisher在movieDir.listFiles()上仍然不走运;我想可能是因为我构造了使用getColumnIndex的方法
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"
        );
    }