我需要将文件下载到设备的内存中。我这样做:

Uri downloadUri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(downloadUri);
request.setDestinationInExternalFilesDir(getContext(),getContext().getFilesDir().getAbsolutePath(), name);


文件加载成功。我需要检查此文件的存在,因此不必再次下载:

File file = new File(getContext().getFilesDir().getAbsolutePath(), name);
if (!file.exists()) {
   ...
}


该检查不起作用,该文件始终会再次加载。
我也尝试获取MediaPlayer()的文件

String path = "file://" + getContext().getFilesDir().getAbsolutePath() + File.separator + name;
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(getContext(), Uri.parse(path));


这也行不通...
我究竟做错了什么?

最佳答案

您会将文件保存到设备的内部存储器中,但是在尝试获取文件时,您正在应用的专用存储器中进行搜索。与下载语言不同

setDestinationInExternalPublicDir


  DownloadManager.Request setDestinationInExternalPublicDir(字符串dirType,
                  字符串子路径)
  将下载文件的本地目标设置为公共外部存储目录中的路径(由getExternalStoragePublicDirectory(String)返回)。
  
  MediaScanner不会扫描下载的文件。但是可以通过调用allowScanningByMediaScanner()使它可扫描。


getFilesDir

文件getFilesDir()


  返回到使用openFileOutput(String,int)创建的文件存储在文件系统上目录的绝对路径。
  
  如果将调用的应用程序移至采用的存储设备,则返回的路径可能会随时间变化,因此仅应保留相对路径。
  
  调用应用程序无需其他权限即可读取或写入返回路径下的文件。

08-18 01:22