我需要将文件下载到设备的内部存储器中。我是这样做的:
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));
这也行不通...... 我做错了什么?
答案 0 :(得分:0)
您正在将文件保存到设备内部存储器,但在尝试获取您正在应用程序的私人存储器中搜索的文件时。这与下载本地不同
<强> setDestinationInExternalPublicDir 强>
DownloadManager.Request setDestinationInExternalPublicDir(String dirType, String subPath) 将下载文件的本地目标设置为公共外部存储目录中的路径(由getExternalStoragePublicDirectory(String)返回)。
MediaScanner不会扫描下载的文件。但是可以通过调用allowScanningByMediaScanner()来进行扫描。
<强> getFilesDir 强>
文件getFilesDir()
返回文件系统上目录的绝对路径,其中存储使用openFileOutput(String,int)创建的文件。
如果将调用应用程序移动到已采用的存储设备,则返回的路径可能会随时间发生变化,因此只应保留相对路径。
调用应用程序无需其他权限即可在返回的路径下读取或写入文件。