如何在Android 9上使用MediaStore.video获取视频文件?
我正在开发一个视频播放器应用程序。我的应用程序在android 9下运行良好。我正在使用MediaStore.Video访问缩略图和其他数据。该代码不适用于android 9及以上版本。我已获得所有许可。在清单请求中,ExternalStorageLeagacy设置为true。任何东西都可以在android 9下工作如何在Android 9上使用MediaStore.video获取视频文件?,android,android-mediaplayer,android-contentprovider,android-external-storage,Android,Android Mediaplayer,Android Contentprovider,Android External Storage,我正在开发一个视频播放器应用程序。我的应用程序在android 9下运行良好。我正在使用MediaStore.Video访问缩略图和其他数据。该代码不适用于android 9及以上版本。我已获得所有许可。在清单请求中,ExternalStorageLeagacy设置为true。任何东西都可以在android 9下工作 public class VideoLoader { private static final Uri uri = MediaStore.Video.Media.EXTERNAL_
public class VideoLoader {
private static final Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
private static final String mediaData = MediaStore.MediaColumns.DATA;
private static final String thumbData = MediaStore.Video.Thumbnails.DATA;
private static final String id = MediaStore.Video.Media._ID;
private static final String name = MediaStore.Video.Media.DISPLAY_NAME;
private static final String duration = MediaStore.Video.Media.DURATION;
private static final String size = MediaStore.Video.Media.SIZE;
private static final String resolution = MediaStore.Video.Media.RESOLUTION;
private Context context;
public VideoLoader(Context context) {
this.context = context;
}
public ArrayList<VideoData> runCursor(String sortOrder) {
ArrayList<VideoData> videoList = new ArrayList<>();
String[] projection = new String[]{
mediaData,
thumbData,
id,
name,
duration,
size,
resolution
};
try {
Cursor cursor = context.getContentResolver().query(
uri,
projection,
null,
null,
sortOrder
);
// Cache column indices.
assert cursor != null;
int columnData = cursor.getColumnIndexOrThrow(mediaData);
int thumbColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA);
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID);
int nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
int durationColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
int resolutionColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION);
/*int resolutionOfVideo = cursor.getColumnIndexOrThrow(resolution);*/
String absolutePath, mediaDefinition = null, mediaResolution;
while (cursor.moveToNext()) {
// Get values of columns for a given video.
absolutePath = cursor.getString(columnData);
String parentPath = Objects.requireNonNull(new
File(absolutePath).getParentFile()).getName();
mediaResolution = cursor.getString(resolutionColumn);
long id = cursor.getLong(idColumn);
int resolution = cursor.getInt(resolutionColumn);
Uri contentUri = ContentUris.withAppendedId(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
VideoData data = new VideoData();
data.setPath(absolutePath);
data.setName(cursor.getString(nameColumn));
data.setTime(new File(absolutePath).lastModified());
data.setDate(new File(absolutePath).lastModified());
data.setFolder(parentPath);
data.setDuration(cursor.getInt(durationColumn));
data.setSize(cursor.getInt(sizeColumn));
data.setResolution(mediaResolution);
data.setMediaDefinition(mediaDefinition);
videoList.add(data);
Log.i("thumb"," === "+cursor.getString(thumbColumn));
Log.i("name"," === "+cursor.getString(nameColumn));
Log.i("folder"," === "+parentPath);
Log.i("date"," === "+new File(absolutePath).lastModified());
Log.i("duration"," === "+cursor.getInt(durationColumn));
Log.i("size"," === "+cursor.getInt(sizeColumn));
Log.i("resolution One Number"," === "+resolution);
Log.i("resolution Two Number"," === "+mediaResolution);
Log.i("quality"," === "+mediaDefinition);
Log.i("contentUri"," === "+contentUri);
}
cursor.close();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return videoList;
}
}
公共类视频加载器{
私有静态最终Uri=MediaStore.Video.Media.EXTERNAL\u CONTENT\u Uri;
私有静态最终字符串mediaData=MediaStore.MediaColumns.DATA;
私有静态最终字符串thumbData=MediaStore.Video.Thumbnails.DATA;
私有静态最终字符串id=MediaStore.Video.Media.\u id;
私有静态最终字符串名称=MediaStore.Video.Media.DISPLAY\u name;
私有静态最终字符串持续时间=MediaStore.Video.Media.duration;
私有静态最终字符串大小=MediaStore.Video.Media.size;
私有静态最终字符串分辨率=MediaStore.Video.Media.resolution;
私人语境;
公共视频加载器(上下文){
this.context=上下文;
}
公共ArrayList运行游标(字符串排序器){
ArrayList videoList=新的ArrayList();
字符串[]投影=新字符串[]{
mediaData,
拇指数据,
身份证件
名称
期间
大小,
决议
};
试一试{
Cursor Cursor=context.getContentResolver().query(
乌里,
投影,
无效的
无效的
排序器
);
//缓存列索引。
断言游标!=null;
int columnData=cursor.getColumnIndexOrThrow(mediaData);
int thumbColumn=cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA);
int-idColumn=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.\u-ID);
int NAME column=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY\u NAME);
int durationColumn=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
int-sizeColumn=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
int resolutionColumn=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION);
/*int resolutionOfVideo=cursor.getColumnIndexOrThrow(分辨率)*/
字符串绝对路径,mediaDefinition=null,mediaResolution;
while(cursor.moveToNext()){
//获取给定视频的列值。
absolutePath=cursor.getString(columnData);
字符串parentPath=Objects.requirennull(新
文件(绝对路径).getParentFile()).getName();
mediaResolution=cursor.getString(resolutionColumn);
long id=cursor.getLong(idColumn);
int resolution=cursor.getInt(resolutionColumn);
Uri contentUri=ContentUris.withAppendedId(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,id);
VideoData数据=新的VideoData();
data.setPath(绝对路径);
data.setName(cursor.getString(nameColumn));
data.setTime(新文件(absolutePath).lastModified());
data.setDate(新文件(absolutePath).lastModified());
data.setFolder(parentPath);
data.setDuration(cursor.getInt(durationColumn));
data.setSize(cursor.getInt(sizeColumn));
data.setResolution(mediaResolution);
data.setMediaDefinition(mediaDefinition);
视频列表。添加(数据);
Log.i(“thumb”,“thumb=”+cursor.getString(thumbColumn));
Log.i(“name”,“name=”+cursor.getString(nameColumn));
Log.i(“文件夹”,“父路径”);
Log.i(“date”,即“=”+新文件(absolutePath).lastModified());
Log.i(“duration”,“duration=”+cursor.getInt(durationColumn));
Log.i(“size”,“size=”+cursor.getInt(sizeColumn));
Log.i(“分辨率一号”,“分辨率=”+);
Log.i(“分辨率二号”,“=”+mediaResolution);
Log.i(“质量”、“媒体定义”);
Log.i(“contentUri”,“contentUri=”+contentUri);
}
cursor.close();
}捕获(IllegalArgumentException e){
e、 printStackTrace();
}
返回视频列表;
}
}