Android Studio中如何访问另一个模块的视频文件?
问题描述
项目拆分为两个模块:主模块存放XML、Kotlin文件及图片,视频模块存放20+视频文件(规避App Bundle 150MB大小限制)。已配置模块依赖,但视频移至独立模块后,原通过android.resource://路径播放视频的方式失效,无法访问视频文件。
原视频在主模块时的正常运行代码:
val intent = Intent(requireActivity(), WatchActivity::class.java) intent.putExtra("filePath", "android.resource://${requireActivity().packageName}/${R.raw.addeventvideo}") requireActivity().startActivity(intent)
解决方案
核心问题是视频资源归属独立模块后,原URI使用的主模块包名无法定位到视频模块的资源,以下是几种可行解决方式:
方案1:传递资源ID而非构建URI(推荐)
直接传递视频资源的ID,在WatchActivity中调用VideoView.setVideoResource()播放,无需处理包名差异:
- 主模块按钮点击代码:
// 注意:引用视频模块的R类,而非主模块的R类 val intent = Intent(requireActivity(), WatchActivity::class.java) intent.putExtra("videoResId", com.yourpackage.videomodule.R.raw.addeventvideo) requireActivity().startActivity(intent)
WatchActivity中处理逻辑:
val videoResId = intent.getIntExtra("videoResId", -1) if (videoResId != -1) { videoView.setVideoResource(videoResId) videoView.start() }
方案2:使用视频模块的包名构建URI
若需保留URI播放方式,需将URI中的包名替换为视频模块的包名:
// 视频模块的namespace(在其build.gradle中定义) val videoModulePackage = "com.yourpackage.videomodule" val intent = Intent(requireActivity(), WatchActivity::class.java) intent.putExtra("filePath", "android.resource://$videoModulePackage/${com.yourpackage.videomodule.R.raw.addeventvideo}") requireActivity().startActivity(intent)
方案3:确认模块依赖配置正确
确保主模块能正常访问视频模块的资源:
- 视频模块需为Android Library类型(build.gradle中配置
plugins { id 'com.android.library' }) - 主模块build.gradle中添加依赖:
dependencies { implementation project(":videomodule") // 替换为你的视频模块名称 }
- 视频模块的
namespace配置正确,保证主模块能引用其R类
内容的提问来源于stack exchange,提问作者RagingGoat
相关产品推荐
相关产品推荐

