Ionic如何访问Android设备本地视频?加载失败求助
解决Ionic访问Android平板本地视频文件的思路
嘿,我来帮你排查下这个问题——你遇到的net::ERR_FILE_NOT_FOUND本质是Ionic应用没法正确定位到Android本地存储的视频文件,咱们从几个核心方向拆解解决:
1. 修正文件路径的写法
你现在用的/storage/Movies/video_tutorial.mp4是硬编码的绝对路径,但Android设备的外部存储路径并非统一(比如大部分设备实际路径是/storage/emulated/0/Movies/),直接写根路径容易适配失败。
建议用Ionic官方的@ionic-native/file插件获取标准的外部存储路径,代码示例:
import { File } from '@ionic-native/file/ngx'; constructor(private file: File) { } // 获取视频的正确路径 getVideoFullPath() { // 拿到外部存储根目录,拼接Movies文件夹和视频文件名 const moviesDir = this.file.externalRootDirectory + 'Movies/'; return moviesDir + 'video_tutorial.mp4'; }
然后在HTML里动态绑定这个路径:
<video preload="metadata" autoplay loop webkit-playsinline class="videoPlayer"> <source [src]="getVideoFullPath()" type="video/mp4" /> </video>
2. 补全Android权限配置
你只添加了xmlns:android命名空间远远不够,需要在AndroidManifest.xml里配置完整的存储权限:
<!-- Android 10及以下需要的读权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Android 11+ 访问公共目录需要的权限 --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <!-- 在application标签内添加,绕过Android 10+的分区存储限制 --> <application ... android:requestLegacyExternalStorage="true"> </application>
配置完成后,记得在应用运行时主动请求权限,比如用@ionic-native/permission插件触发权限弹窗。
3. 手动验证文件实际路径
先通过Android平板的文件管理器确认视频的真实位置:
- 大部分设备的公共Movies目录路径是
/storage/emulated/0/Movies/video_tutorial.mp4 - 部分外接SD卡的平板,路径可能是
/storage/[SD卡ID]/Movies/video_tutorial.mp4
你可以先把HTML里的src临时改成这个实际路径测试,如果能加载成功,就说明是路径适配的问题。
4. 尝试用专门的文件打开插件
如果WebView直接访问本地文件还是有限制,可以用@ionic-native/file-opener插件来打开视频,它专门处理本地文件的系统级访问,兼容性更好:
import { FileOpener } from '@ionic-native/file-opener/ngx'; constructor(private fileOpener: FileOpener, private file: File) { } openLocalVideo() { const videoPath = this.file.externalRootDirectory + 'Movies/video_tutorial.mp4'; this.fileOpener.open(videoPath, 'video/mp4') .then(() => console.log('视频打开成功')) .catch(err => console.error('打开失败:', err)); }
内容的提问来源于stack exchange,提问作者Akai shur
相关产品推荐
相关产品推荐

