Android parse(“file://”和“#x2B;”);访问特定文件夹的步骤
我的问题分为两部分,如何获取以下代码以访问此位置: “/storage/emulated/0/Movies/specific文件夹” 代码: 而且,到时候我如何从在线服务器访问视频/文件 我尝试了以下方法: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
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”)
tryUri.fromFile(movieDir)代码>以获取Uri。;)为了显示文件夹中的所有视频,我将尝试以下操作:movieDir.listFiles()代码>在我确保movieDir.isDirectory()
为true之后。并根据后缀判断文件是否为视频。嗯,你的评论合乎逻辑,应该有效。但是我的gridview现在显示为空白。我正在尝试让我的gridview显示文件夹中的所有视频。我还尝试了:Uri mediaUri=Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+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"
);
}