如何在Android 9上使用MediaStore.video获取视频文件?

如何在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_

我正在开发一个视频播放器应用程序。我的应用程序在android 9下运行良好。我正在使用MediaStore.Video访问缩略图和其他数据。该代码不适用于android 9及以上版本。我已获得所有许可。在清单请求中,ExternalStorageLeagacy设置为true。任何东西都可以在android 9下工作

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();
}
返回视频列表;
}
}