java.io.FileNotFoundException: /storage/emulated/0/video.mp4: open failed: EACCES (Permission denied)
《第一行代码》书中 8.4.2 播放视频”的代码在书中的 Nougat 版本运行没有问题,但是在 Pie 中会显示如下图所示
Can't play this video.
Log 中会显示如下:
2019-11-13 16:46:36.273 6238-6238/xxx.xxx.mainActivity/VideoView: Unable to open content: /storage/emulated/0/video.mp4
java.io.FileNotFoundException: /storage/emulated/0/video.mp4: open failed: EACCES (Permission denied)
查询了一圈发现原因是:书中代码直接操作的是根目录下的 video.mp4 文件,但是在 API level 29 之后,软件默认只有操作其自身目录下的内容的权限,当需要对其他内容进行操作时需要获取权限,特别是当 targetSdkVersion
>= 29 时,需要将requestLegacyExternalStorage
更改为 true
(default: false)
解决方法
在 AndroidManifest.xml 文件中的 <application>
中添加
android:requestLegacyExternalStorage="true"