Android Kitkat允许其他应用读取写入SD卡的文件

Android Kitkat允许其他应用读取写入SD卡的文件,android,android-4.4-kitkat,Android,Android 4.4 Kitkat,我想做的是: 我的应用程序从文件服务器下载一个视频(.mp4文件),并将其存储在SD卡(外部strage)上 我想用安装的视频播放器播放视频 这在Android 4.3上运行良好: String path = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + java.io.File.separator + RESPATHCONSTANT

我想做的是:

  • 我的应用程序从文件服务器下载一个视频(.mp4文件),并将其存储在SD卡(外部strage)上
  • 我想用安装的视频播放器播放视频
这在Android 4.3上运行良好:

String path = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() 
                    + java.io.File.separator + RESPATHCONSTANT 
                    + java.io.File.separator + filename;

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "video/mp4");
然后我就开火了

对于Android 4.3,视频播放器现在接管并播放视频

对于Android 4.4,我可以使用文件浏览器,导航到视频,然后使用安装的视频播放器播放视频。(浏览器已设置了相应的标志,因此可以浏览其他程序创建的目录)但我无法使用上述方法。据我所知,从Android 4.4开始,应用程序只能读写SD卡上的目录,SD卡是由应用程序自己创建的。我遇到了这个问题


如何存储这些文件并授予其他程序读取它们的权限?

显然问题出在另一个地方。对于4.4以下的Android版本,生成的URI很好,但对于Android 4.4,URI的准备不适当

URI的类型为StringURI

/storage/emulated/0//r.a4dd6417bd9936aebf3942a001d33c3.mp4

URI的类型为HierarchycalURI

file:///storage/emulated/0/./r.a4dd6417bd9936aebf3942a0001d33c3.mp4

“我的应用程序从我们的文件服务器下载视频(.mp4文件)并将其存储在SD卡上”——您使用的代码与“SD卡”无关。下面是一些博客文章,概述了SDK术语和。
Uri data = Uri.parse(path);
Uri data = Uri.fromFile(new File(path))