尝试使用Uri.parse打开文件,但一直拒绝访问它。我对什么是错很困惑。
为便于阅读而裁剪的Manifest.xml
<application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</application>
导致错误的代码段:
Uri video = Uri.parse(Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/victamjpeg.sdp");
videoView.setVideoURI(video);
和实际的错误:
10-30 01:11:38.640 4293-4293 /? W / MediaPlayer:无法在客户端打开文件;尝试服务器端:java.io.FileNotFoundException:无内容提供者:/storage/1A0C-331C/victamjpeg.sdp
10-30 01:11:38.640 4293-4293 /? W / VideoView:java.io.FileNotFoundException:/storage/1A0C-331C/victamjpeg.sdp:打开失败:EACCES(权限被拒绝)
10-30 01:11:38.640 4293-4293 /? W / VideoView:在java.io.FileInputStream。处(FileInputStream.java:76)
10-30 01:11:38.640 4293-4293 /? W / VideoView:在java.io.FileInputStream。处(FileInputStream.java:76)
看来我没有阅读权限,但据我所知必须设置该权限。从
ls -l
执行adb shell
证明文件位于/sdcard/victamjpeg.sdp
并由root拥有。 最佳答案
首先,看来您的<uses-permission>
元素放置在错误的位置。他们必须是<manifest>
的孩子,<application>
的同伴。您所显示的内容将它们显示为<application>
的子代。
二,更换:
Uri video = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/victamjpeg.sdp");
与:
Uri video = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "victamjpeg.sdp"));
这可以处理
getExternalStorageDirectory()
返回尾随/
的值的情况。还将方案放在Uri
中,而您的实现未将其放入,导致普遍无效的Uri
。还要注意,如果您在Android 6.0上测试存储权限为
dangerous
,并且targetSdkVersion
为23或更高版本,则需要使用the runtime permission system。关于java - Mediaplayer无法打开已解析的URI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33434315/