You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()播放,无需处理包名差异:

  1. 主模块按钮点击代码:
// 注意:引用视频模块的R类,而非主模块的R类
val intent = Intent(requireActivity(), WatchActivity::class.java)
intent.putExtra("videoResId", com.yourpackage.videomodule.R.raw.addeventvideo)
requireActivity().startActivity(intent)
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:15:35