Android Studio中FileProvider视频播放异常问题排查与解决
VR视频播放功能FileProvider问题排查与解决
问题背景
开发了一个适配VR场景的功能:启动HTTP服务器监听文件名请求,触发后调用系统标准播放器播放对应视频。该功能曾正常运行,近期突然失效。
报错详情
使用FileProvider生成的视频URI为 content://com.example.vrtestvr.fileprovider/external_files/VRvideo/1.mp4,播放器提示无法缓冲启动,错误码2005。
相关代码(MainActivity中播放逻辑)
private void playVideo(File videoFile) { if (!videoFile.exists()) { Log.e("VideoFileCheck", "File does not exist: " + videoFile.getAbsolutePath()); return; } String mimeType; String extension = videoFile.getName().substring(videoFile.getName().lastIndexOf(".") + 1).toLowerCase(); switch (extension) { case "mp4": mimeType = "video/mp4"; break; case "mkv": mimeType = "video/x-matroska"; break; default: mimeType = "video/*"; break; } Intent intent = new Intent(Intent.ACTION_VIEW); Uri videoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", videoFile); Log.d("VideoFileCheck", "Video URI: " + videoUri.toString()); intent.setDataAndType(videoUri, mimeType); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(this, "No application found to play video", Toast.LENGTH_SHORT).show(); } }
尝试过的无效方案
- 修改AndroidManifest.xml中的FileProvider配置
- 调整代码中URI生成与权限授予逻辑
- 修改file_paths.xml中的路径映射规则
最终可行解决方案
直接使用file://格式的URI替代FileProvider生成的content URI,代码如下:
Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Android 8+ 必需 Uri data = Uri.parse(new File("file://" + videoFile).toString()); intent.setDataAndType(data, mimeType); startActivity(intent);
正常路径示例:file:/storage/emulated/0/VRvideo/0.mp4
内容的提问来源于stack exchange,提问作者P G
相关产品推荐
相关产品推荐

