android - 从数据库读取 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 以字符串格式保存到数据库后才会出现此问题。我该如何解决这个问题?
解决方案
然后将视频的uri以String格式保存在数据库中
Uri
以后可能无法使用。
我该如何解决这个问题?
在 Android 4.4+ 上,切换到ACTION_OPEN_DOCUMENT
而不是ACTION_GET_CONTENT
. 然后,当你得到你的Uri
,调用takePersistableUriPermissions()
一个ContentResolver
. 这应该使您可以持久访问由 标识的内容Uri
,并且您应该能够稍后播放视频......当然,假设视频仍然存在。
有关此主题的更多信息,请参阅此博客文章。
推荐阅读
- c# - 如何从 Xamarin.Forms 中的 UWP 访问 PCL 中的参数
- iis - ASP.NET Windows 身份验证向应用程序返回错误的用户
- python-3.x - 如何使用用户输入打破无限循环
- python - 抓取数据框中的超链接文本并将其附加到 CSV 中的一行
- dynamics-crm - 如何使用 kingswaysoft 为 SSIS 包从 CRM 中检索超过 5000 条记录?
- c# - 将 blob 从一个目录复制到同一容器 Azure 存储中的另一个目录
- php - 如何在没有适当分隔符的情况下分解字符串 - PHP
- laravel - 如何在 VS Code 中为 Laravel 项目设置“pathMappings”
- javascript - 如何获取单击的事件 ID 并使用这些详细信息导航到 ASPX 页面?(全日历)
- reactjs - 如何每 2 秒从 apollo-link-state 获取数据(客户端数据轮询)