首页 > 解决方案 > 从数据库读取 uri 后,VideoView 中出现“无法播放视频”错误

问题描述

在我的应用程序中,我正在使用 Intent 选择视频,如下所示:

    Intent intent = new Intent();
    intent.setType("video/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, SELECT_VIDEO);

然后将视频的uri以String格式保存在数据库中

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == SELECT_VIDEO) {
        Uri selectedVideoUri = data.getData();
        if (selectedVideoUri != null) {
                    videoPathList.add(selectedVideoUri.toString());

我从数据库中读取字符串,使用 Uri.parse() 方法将其转换为 uri 并使用它来播放视频。但是我收到“无法播放视频”错误。

    VideoView videoView =(VideoView)findViewById(R.id.videoView);

    //Creating MediaController
    MediaController mediaController= new MediaController(this);
    mediaController.setAnchorView(videoView);

    Uri uri= Uri.parse(getIntent().getStringExtra("video_path"));

    //Setting MediaController and URI, then starting the videoView
    videoView.setMediaController(mediaController);
    videoView.setVideoURI(uri);
    videoView.requestFocus();
    videoView.start();

如果我使用在 onActivityResult() 中获得的 uri 播放,视频播放正常。仅在将 uri 以字符串格式保存到数据库后才会出现此问题。我该如何解决这个问题?

标签: androiddatabaseuri

解决方案


然后将视频的uri以String格式保存在数据库中

Uri以后可能无法使用。

我该如何解决这个问题?

在 Android 4.4+ 上,切换到ACTION_OPEN_DOCUMENT而不是ACTION_GET_CONTENT. 然后,当你得到你的Uri,调用takePersistableUriPermissions()一个ContentResolver. 这应该使您可以持久访问由 标识的内容Uri,并且您应该能够稍后播放视频......当然,假设视频仍然存在。

有关此主题的更多信息,请参阅此博客文章


推荐阅读