尝试使用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:没有内容提供者:/ storage1A0C-331C /victamjpeg.sdp
10-30 01:11:38.640 4293-4293 /? W / VideoView:java.io.FileNotFoundException:/ storage1A0C-331C /victamjpeg.sdp:open failed:EACCES(Permission denied)
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拥有。
答案 0 :(得分:3)
首先,您的<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。
答案 1 :(得分:2)
uses-permission标签需要在应用程序标签之外。