Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用实际文件名从Android默认下载管理器下载文件?_Android_Mysql - Fatal编程技术网

如何使用实际文件名从Android默认下载管理器下载文件?

如何使用实际文件名从Android默认下载管理器下载文件?,android,mysql,Android,Mysql,我制作了一个Android应用程序,当点击歌曲列表视图时可以下载mp3歌曲。我用过这个 request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS,"MySong.mp3"); 但我的歌曲会不时从mysql数据库中更新。当我使用上述方法时,所有的歌曲都以MySong.mp3 如果我避免使用上述方法,文件将以实际文件名下载,但下载完成后会立即删除。有解决办法吗?所以。。我就是这样做的,我相信这会对你

我制作了一个Android应用程序,当点击歌曲列表视图时可以下载mp3歌曲。我用过这个

request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS,"MySong.mp3");
但我的歌曲会不时从mysql数据库中更新。当我使用上述方法时,所有的歌曲都以MySong.mp3


如果我避免使用上述方法,文件将以实际文件名下载,但下载完成后会立即删除。有解决办法吗?

所以。。我就是这样做的,我相信这会对你有所帮助

//define the path of your file location.
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
                +File.separator + "FOLDER_NAME" + File.separator + fileName;

//create the new file.
final File saveFile = new File(path);

//make all the directory structures needed if the location doesn't exist.
File parentDest = saveFile.getParentFile();
        if (!parentDest.exists()) {
            parentDest.mkdirs(); 
        }
设置此项后,您必须确保为DownloadManager提供此文件的确切路径

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
                    File.separator + "FOLDER_NAME" + File.separator + fileName);
希望这有帮助,
JozeRi

通过评论中提供的链接,我遵循了这一点,效果不错。感谢链接@commonware

String url = "www.somedownloalink.com/some-song.mp3";

String filename = url.substring(url.lastIndexOf('/') + 1);

        request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS,filename);

按照您所做的方式,每当您加载新歌时,它都会将其重命名为
MySong.mp3
,因为前一首歌也有相同的名称,它会覆盖它。所以你必须想出一个方法为每首歌生成一个唯一的名字。例如:您可以将
id
附加到歌曲名称的末尾。确保您总是首先检查文件夹中是否已存在该名称,以便生成另一个名称。这样你就不会写歌曲了。问题不在于下载位置,先生,真正的问题在于下载的文件名。你是如何获得歌曲的?你能不能找个地方把歌曲的名字取出来,这样你就可以给它正确的名字了?每次我在数据库中更新链接和mp3文件时,链接和mp3文件都会改变。总之找到了答案。也可以这样做
request.setdestinationnexternalfilesdir(这是Environment.DIRECTORY_下载的,“MySong”+System.currentTimeMillis()+“.mp3”)